LangChainについてのエラーがわからない

実現したいこと

!news 〇〇と入力すると、〇〇についてのニュースを出力するディスコードのボットを作ろうとしています。

ChatPromptTemplateのdocstringには、

class ChatPromptTemplate(
*,
name: str | None = None,
input_variables: List[str],
input_types: Dict[str, Any] = dict,
output_parser: BaseOutputParser | None = None,
partial_variables: Mapping[str, str | (() -> str)] = dict,
messages: List[MessageLike],
validate_template: bool = False
)
A prompt template for chat models.

Use to create flexible templated prompts for chat models.

と説明があります。

発生している問題・分からないこと

Prompt missing required variables: {'tools', 'tool_names', 'agent_scratchpad'}
というエラーが出ています。

エラーメッセージ

error

1[Running] python -u "/Users/shosukesato/ChatGPT-API/DiscordNews.py" 2[2024-02-03 19:20:56] [INFO ] discord.client: logging in using static token 3[2024-02-03 19:20:58] [INFO ] discord.gateway: Shard ID None has connected to Gateway (Session ID: 8fb31ddd76a914863db4c7cf150c26f7). 4Logged in as News Generator#2987 5[2024-02-03 19:21:10] [ERROR ] discord.client: Ignoring exception in on_message 6Traceback (most recent call last): 7 File "/Users/shosukesato/.pyenv/versions/3.8.12/lib/python3.8/site-packages/discord/client.py", line 441, in _run_event 8 await coro(*args, **kwargs) 9 File "/Users/shosukesato/ChatGPT-API/DiscordNews.py", line 32, in on_message 10 response = await get_news(theme) 11 File "/Users/shosukesato/ChatGPT-API/DiscordNews.py", line 39, in get_news 12 agent = create_structured_chat_agent(llm, tools, prompt_template) 13 File "/Users/shosukesato/.pyenv/versions/3.8.12/lib/python3.8/site-packages/langchain/agents/structured_chat/base.py", line 265, in create_structured_chat_agent 14 raise ValueError(f"Prompt missing required variables: {missing_vars}") 15ValueError: Prompt missing required variables: {'tools', 'tool_names', 'agent_scratchpad'}

該当のソースコード

Python

1import discord 2from langchain.agents import initialize_agent, Tool, AgentExecutor 3from langchain.prompts import ChatPromptTemplate 4from langchain.agents import AgentType, create_structured_chat_agent 5from langchain_community.utilities import GoogleSearchAPIWrapper 6from langchain_openai import ChatOpenAI 7 8 9intents = discord.Intents.default()10intents.messages = True # メッセージイベントを有効にする11intents.message_content = True12intents.guilds = True # ギルド(サーバー)関連のイベントを有効にする13 14CHANNEL_ID = ??? 15 16client = discord.Client(intents=intents)17 18@client.event19async def on_ready():20 print(f'Logged in as {client.user}')21 22@client.event23async def on_message(message):24 if message.author == client.user:25 return26 27 if message.channel.id != CHANNEL_ID:28 return29 30 if message.content.startswith('!news '):31 theme = message.content[len('!news '):].strip()32 response = await get_news(theme)33 await message.channel.send(response)34 35async def get_news(theme):36 llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo", max_tokens=2000, openai_api_key='???')37 tools = define_tools()38 prompt_template = create_prompt_template(tools)39 agent = create_structured_chat_agent(llm, tools, prompt_template) 40 executor = AgentExecutor(agent)41 response = await executor.invoke({"theme": theme})42 return response 43 44def create_prompt_template(tools):45 # tool_names と agent_scratchpad がどのように使用されるかに基づいて適切な値を設定46 tool_names = [tool.name for tool in tools]47 agent_scratchpad = '' # 必要に応じて適切な値を設定48 49 prompt_template = ChatPromptTemplate(50 input_variables=["theme"], # 必要な入力変数51 messages=[], # 空のメッセージリスト52 template=f""" 53 tool_names: {tool_names}54 agent_scratchpad: {agent_scratchpad}55 tools: {tools}56 あなたはニュース記事を書くブロガーです。 57 下記のテーマについて、Google検索で最新情報を取得し、取得した情報に基づいてニュースの要約とそのニュースに関する考察を書いてください。 58 1000文字以内で、日本語で出力してください。 59 記事の末尾に参考にしたURLを参照元としてタイトルとURLを出力してください。 60 ### 61 テーマ:{{theme}} 62 """63 )64 return prompt_template 65 66 67 68# 他の関数をここに定義69def define_tools():70 search = GoogleSearchAPIWrapper(google_api_key='???', google_cse_id='???')71 return [72 Tool(73 name = "Search",74 func=search.run,75 description="useful for when you need to answer questions about current events. You shoule ask targeted questions"76 ),77 ]78 79# Discord Botのトークンを使用して接続80client.run('???')

試したこと・調べたこと

上記の詳細・結果

LangChainについての知識が不足しているため、エラーは治りませんでした。

補足

VSCodeで実行しています。
Macです。

コメントを投稿

0 コメント