意外と使うかつ忘れそうなのでメモ。
結論
引数の agent_kwargs に以下を dict 形式で指定:
ai_prefix: str = "AI" # agent の名前
human_prefix: str = "Human" # user の名前
prefix: str # エージェント説明などを含む prompt の一部
format_instructions: str # タスク例など instruction を含む prompt の一部
suffix: str # 履歴やユーザ入力を含む prompt の一部
input_variables: List[str] # prompt で用いる変数名リスト
prefix, suffix, format_instructions は、agents/modules 下の prompt.py で定義される
なお、ディレクトリ構造は以下。
詳細
initialize_agent にて、以下のように呼び出している。
# https://github.com/hwchase17/langchain/blob/master/langchain/agents/initialize.py#L55-L57
"""
# langchain/langchain/agents/loading.py
AGENT_TO_CLASS = {
"zero-shot-react-description": agents.ZeroShotAgent,
"react-docstore": agents.ReActDocstoreAgent,
"self-ask-with-search": agents.SelfAskWithSearchAgent,
"conversational-react-description": agents.ConversationalAgent,
}
"""
def initialize_agent(
# (中略)
agent_kwargs: Optional[dict] = None,
):
# (中略)
agent_obj = AGENT_TO_CLASS[agent].from_llm_and_tools(
llm,
tools,
callback_manager=callback_manager,
**agent_kwargs
)
SelfAskWithSearchAgent の該当箇所は、以下:
# https://github.com/hwchase17/langchain/blob/master/langchain/agents/conversational/base.py#L90
from langchain.agents.conversational.prompt import (
FORMAT_INSTRUCTIONS, PREFIX, SUFFIX
)
class ConversationalAgent(Agent):
@classmethod
def from_llm_and_tools(
cls,
llm: BaseLLM,
tools: Sequence[BaseTools],
# (中略)
prefix: str = PREFIX,
suffix: str = SUFFIX,
format_instructions: str = FORMAT_INSTRUCTIONS,
ai_prefix: str = "AI",
human_prefix: str = "Human",
input_variables: Optional[List[str]] = None,
**kwargs: Any,
) -> Agent:
cls._validate_tools(tools)
prompt = cls.create_prompt(
tools,
ai_prefix=ai_prefix,
human_prefix=human_prefix,
prefix=prefix,
suffix=suffix,
format_instructions=format_instructions,
input_variables=input_variables,
)
llm_chain = LLMChain(
llm=llm,
prompt=prompt,
callback_manager=callback_manager,
)
tool_names = [tool.name for tool in tools]
return cls(
llm_chain=llm_chain,
allowed_tools=tool_names,
ai_prefix=ai_prefix,
**kwargs,
)
# (中略)
Comments