理解自我反思的简单代码(代理设计模式)

ID:21818 / 打印

理解自我反思的简单代码(代理设计模式)

反思/自我反思有点被低估了。如果您的应用程序依赖于提示,我强烈建议您探索这个概念。实施起来并不难,反思技术可以帮助迭代地完善 llm 响应。

from mirascope.core import BaseMessageParam, ResponseModelConfigDict, openai from pydantic import BaseModel import os  os.environ["OPENAI_API_KEY"] = ""   class Review(BaseModel):     issues: list[str]     is_good: bool      model_config = ResponseModelConfigDict(strict=True)   class Story(BaseModel):     story: str      model_config = ResponseModelConfigDict(strict=True)   class StoryWriter(BaseModel):     keywords: list[str]     generator_history: list[openai.OpenAIMessageParam] = []      @openai.call(         "gpt-4o-mini",         response_model=Story,         json_mode=True,         call_params={"temperature": 0.8},     )     def generator(self, query: str) -> list[openai.OpenAIMessageParam]:         return [             BaseMessageParam(                 role="system",                 content="You are an expert in writing short moral stories for kids below the age of 10.",             ),             *self.generator_history,         ]      @openai.call(         "gpt-4o-mini",         response_model=Review,         json_mode=True,         call_params={"temperature": 0.1},     )     def reviewer(self, story: str) -> list[openai.OpenAIMessageParam]:         return [             BaseMessageParam(                 role="system",                 content="You are an expert in reviewing short moral stories for kids below the age of 10, checking whether all the keywords were used effectively and identifying issues related to relevance and ease of understanding",             ),             BaseMessageParam(                 role="user",                 content=f""" Review the given moral story for kids. Check if the story uses all the given keywords. Also check if the story is reasonably realistic, engaging and uses basic vocabulary that is easy to understand for kids below the age of 10. Return the issues. Finally, return True if the moral story is good enough for kids and contains all the keywords.   story: {story}   keywords: {self.keywords}""",             ),         ]      def run(self, steps=3) -> str:         query = f"""Generate a moral story for kids, using all the given keywords. Return only the story. {self.keywords}"""         self.generator_history += [             BaseMessageParam(role="user", content=query),         ]         story = ""         for _ in range(steps):             generator_response = self.generator(query)             story = generator_response.story             reviewer_response = self.reviewer(story)             if reviewer_response.is_good:                 break             query = f"""Use the given feedback to improve the story. Return only the story."""             self.generator_history += [                 BaseMessageParam(role="assistant", content=generator_response.story),                 BaseMessageParam(                     role="user",                     content=" ".join(reviewer_response.issues) + " " + query,                 ),             ]         print(self.generator_history)         return story   story = StoryWriter(     keywords=[         "elephant",         "boy",         "strong",         "funny",         "good",         "ride",         "Nikolas",         "road",         "cap",         "car",     ] ).run() print("==================") print("result", story) 
上一篇: Python 初学者指南:快速教程 - 2
下一篇: Python - 级别:询问

作者:admin @ 24资源网   2025-01-14

本站所有软件、源码、文章均有网友提供,如有侵权联系308410122@qq.com

与本文相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。