top of page
植物と本
  • 執筆者の写真Shumpei Miyawaki

LangChain の initialize_agent を用いてプロンプトを指定する方法


意外と使うかつ忘れそうなのでメモ。


結論


引数の 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,
    )
    # (中略)


閲覧数:188回0件のコメント

最新記事

すべて表示

GPT Index #02

Github Document GPT Index #01 2. Document GPT Index では Document [doc] と呼ばれるデータクラスを扱う BaseDocument [code] という基底クラスを継承している 属性値取得のメソッドに加え、Langchain と連携するためのデータ変換メソッドも定義されている from dataclasses import datac

月次まとめ - 2023.01

本ブログ立ち上げ以前のものも軽く追加 # ブログ GitHub / Huggingface https://github.com/tanreinama/GPTSAN https://github.com/dmvaldman/html_semantic_seg https://github.com/ndl-lab/ndlocr_cli https://github.com/helblazer811/

Comments


bottom of page