Langchain 代理和工具:如何将额外的参数传递给输入以外的工具

问题描述 投票:0回答:1

我的 LLM 应用程序包含每个用户和用户 ID 的会话 在这里我想将 userId(当前正在使用 LLM 应用程序的用户的 id)传递给 getPrice 工具 如何将userId发送给工具?



from langchain import hub
from langchain.agents import AgentExecutor, create_react_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import OpenAI
import requests
from langchain.tools import Tool
from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain_core.messages import AIMessage, HumanMessage

llm=ChatOpenAI()
prompt = hub.pull("hwchase17/react-chat")

def getPrice(input,extra):
    print("input +++",input,extra)
    url="https://api.coincap.io/v2/assets/"+input.lower()
    response=requests.get(url)
    price=response.json()["data"]["priceUsd"]
    return price

apicall=Tool(
    name="getCryptoPrice",
    func=getPrice,
    description="use to get the price for any given crypto from user input"
)
tools=[apicall]

agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
memory = ConversationBufferMemory(
    memory_key="chat_history", return_messages=True
)

agent_executor.invoke(
    {
        # what is the price of cardano
        "input": "what is the price of cardano",
        # Notice that chat_history is a string, since this prompt is aimed at LLMs, not chat models
        "chat_history": "Human: Hi! My name is Bob\nAI: Hello Bob! Nice to meet you",

    }
)

我尝试在 inovke 中传递用户 ID,但它不起作用,因为它的语法无效

openai-api langchain large-language-model langchain-agents
1个回答
0
投票

我在将信息传递给工具时遇到问题。所以我所做的是构建一个意图分类器。在调用 LLM 或触发任何函数之前,我首先通过意图分类器运行传入的文本。

意图分类器然后返回一个函数名称。由于这些是常规的 Python 函数,我可以向它们传递任何信息。

这是一个代码示例:


from qdrant_client import QdrantClient
from sentence_transformers import SentenceTransformer

client = QdrantClient(url="http://localhost:6333")

docs = client.search(
    collection_name="intent_classifier",
    query_vector=the_vectorized_question,
    with_payload=["intent"],
    limit=1,
)

tools = {
"do_search": do_search
}

intent = doc[0].__dict__["intent"]
answer = tools[intent](state, raw_question)

def do_search(state, raw_question):
    # do some RAG stuff
    context_data = get_context_data_from_rag_stuff(raw_question)
    return llm.invoke({"question": raw_question, "context": context_data})

除了相似性搜索之外,您还可以向 LLM 进行查询以确定意图。

注意:为了简单起见,我省略了验证逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.