반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리

LC - Cookbook - Agents

2023. 11. 6. 11:46 | Posted by 솔웅


반응형

https://python.langchain.com/docs/expression_language/cookbook/agent

 

Agents | 🦜️🔗 Langchain

You can pass a Runnable into an agent.

python.langchain.com

 

Agents

 

You can pass a Runnable into an agent.

 

Runnable을 에이전트에 전달할 수 있습니다.

 

from langchain.agents import XMLAgent, tool, AgentExecutor
from langchain.chat_models import ChatAnthropic

 

model = ChatAnthropic(model="claude-2")

 

@tool
def search(query: str) -> str:
    """Search things about current events."""
    return "32 degrees"

 

tool_list = [search]

 

# Get prompt to use
prompt = XMLAgent.get_default_prompt()

 

# Logic for going from intermediate steps to a string to pass into model
# This is pretty tied to the prompt
def convert_intermediate_steps(intermediate_steps):
    log = ""
    for action, observation in intermediate_steps:
        log += (
            f"<tool>{action.tool}</tool><tool_input>{action.tool_input}"
            f"</tool_input><observation>{observation}</observation>"
        )
    return log


# Logic for converting tools to string to go in prompt
def convert_tools(tools):
    return "\n".join([f"{tool.name}: {tool.description}" for tool in tools])

 

 

이 코드는 LangChain 및 관련 모듈을 사용하여 구성된 작업 체인을 실행하는 데 사용되는 스크립트입니다. 주요 컴포넌트와 동작에 대한 설명은 다음과 같습니다:

  1. from langchain.agents import XMLAgent, tool, AgentExecutor, ChatAnthropic: XMLAgent와 ChatAnthropic을 포함한 LangChain 모듈과 관련 모듈을 가져옵니다.
  2. model = ChatAnthropic(model="claude-2"): ChatAnthropic 모델을 초기화하고 "claude-2" 모델을 사용하도록 설정합니다.
  3. @tool: 데코레이터를 사용하여 search 함수를 도구로 정의합니다. 이 도구는 query 매개변수를 입력으로 받아 "32 degrees"를 반환합니다. 도구는 현재 이벤트에 대한 정보를 검색하는 데 사용될 수 있습니다.
  4. tool_list = [search]: 도구 목록을 작성하고 search 도구를 포함합니다.
  5. prompt = XMLAgent.get_default_prompt(): XMLAgent 모듈에서 기본 프롬프트를 가져옵니다.
  6. convert_intermediate_steps(intermediate_steps): 중간 단계를 모델에 전달할 수 있는 문자열로 변환하는 함수를 정의합니다. 이 함수는 도구 작업 및 관찰을 로그로 결합한 문자열을 반환합니다.
  7. convert_tools(tools): 도구 목록을 문자열로 변환하는 함수를 정의합니다. 이 함수는 도구 이름과 설명을 포함하는 문자열을 반환합니다.

이 코드의 주요 목적은 도구를 사용하여 중간 작업을 수행하고, 그 결과를 로그로 저장한 후, 이 로그와 프롬프트를 사용하여 모델에 전달하여 최종 결과를 생성하는 것입니다. 이를 통해 ChatAnthropic 모델을 활용하여 다양한 작업을 수행하고 결과를 생성할 수 있습니다.

 

Building an agent from a runnable usually involves a few things:

 

실행 가능 파일에서 에이전트를 구축하려면 일반적으로 다음과 같은 몇 가지 사항이 필요합니다.

 

  1. Data processing for the intermediate steps. These need to represented in a way that the language model can recognize them. This should be pretty tightly coupled to the instructions in the prompt

    중간 단계를 위한 데이터 처리. 이는 언어 모델이 인식할 수 있는 방식으로 표현되어야 합니다. 이는 프롬프트의 지침과 매우 긴밀하게 연결되어야 합니다.

  2. The prompt itself  프롬프트 자체
  3. The model, complete with stop tokens if needed  필요한 경우 중지 토큰이 포함된 모델
  4. The output parser - should be in sync with how the prompt specifies things to be formatted.
    출력 파서 - 프롬프트가 형식화할 항목을 지정하는 방식과 동기화되어야 합니다.

agent = (
    {
        "question": lambda x: x["question"],
        "intermediate_steps": lambda x: convert_intermediate_steps(
            x["intermediate_steps"]
        ),
    }
    | prompt.partial(tools=convert_tools(tool_list))
    | model.bind(stop=["</tool_input>", "</final_answer>"])
    | XMLAgent.get_default_output_parser()
)

 

agent_executor = AgentExecutor(agent=agent, tools=tool_list, verbose=True)
agent_executor.invoke({"question": "whats the weather in New york?"})
    
    
    > Entering new AgentExecutor chain...
     <tool>search</tool>
    <tool_input>weather in new york32 degrees
    
    <final_answer>The weather in New York is 32 degrees
    
    > Finished chain.





    {'question': 'whats the weather in New york?',
     'output': 'The weather in New York is 32 degrees'}

 

이 코드는 LangChain을 사용하여 에이전트를 생성하고 실행하는 일련의 단계를 나타냅니다. 코드의 주요 부분을 다음과 같이 설명합니다:

  1. agent 정의:
    • 에이전트를 구성하기 위해 두 개의 입력을 가집니다. 하나는 "question"이고 다른 하나는 "intermediate_steps"입니다.
    • "question" 입력은 질문을 추출하고, "intermediate_steps" 입력은 중간 작업 로그를 문자열로 변환합니다.
    • prompt.partial() 메서드를 사용하여 도구 목록을 문자열로 변환하고 프롬프트에 연결합니다. 이때 tools 매개변수에 도구 목록을 문자열로 변환한 결과를 전달합니다.
    • model.bind() 메서드를 사용하여 모델과 상호작용 중지 토큰을 정의하고, 종료 토큰이 "</tool_input>" 또는 "</final_answer>"인 경우 상호작용을 종료합니다.
    • 마지막으로 XMLAgent.get_default_output_parser()를 사용하여 출력 파서를 가져와 모델의 출력을 파싱합니다.
  2. agent_executor 생성:
    • agent와 tool_list를 사용하여 AgentExecutor를 초기화합니다. verbose 매개변수는 상세한 로깅을 활성화합니다.
  3. agent_executor.invoke() 호출:
    • agent_executor를 사용하여 실행할 입력을 제공합니다. 이 경우, "question" 키를 가진 입력을 전달하고, 모델에 의해 생성된 중간 작업 로그와 최종 응답을 반환합니다.

이 코드의 목적은 지정된 질문에 대한 응답을 생성하기 위해 에이전트 및 도구를 활용하는 것입니다. 중간 작업 로그와 최종 응답은 XML 형식으로 정의되며, XMLAgent를 사용하여 상호작용하는 중요한 구성 요소입니다.

 

 

 

 

 

 

 

 

반응형