LangChain自定义工具Tool

LangChain部署

pip install langchain

自定义工具

from langchain_openai import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.agents.conversational_chat.base import ConversationalChatAgent
from langchain.agents import AgentExecutor, AgentOutputParser
from langchain.tools import BaseTool
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
import requests

app = FastAPI()

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

SYSTEM_MESSAGE_PREFIX = """尽可能用中文回答以下问题。您可以使用以下工具"""

# 初始化大模型实例,可以是本地部署的,也可是是ChatGPT
#llm = ChatGLM(endpoint_url="http://10.8.10.182:11434/v1")
llm = ChatOpenAI(openai_api_base='http://localhost:11434/v1',openai_api_key='None',model_name='qwen:7b', request_timeout=60)

class MobileAddress(BaseTool):
    name = "searchMobileAddress"
    description = "当查询手机号的归属地时,使用这个工具"

    def _run(self, query: str) -> str:
        url = "https://eolink.o.apispace.com/teladress/teladress"
        payload = {"mobile":f"{query}"}
        headers = {
                "X-APISpace-Token":"v1a524e7ctm4h87illkgmk2xxxxxxx",
                "Content-Type":"application/x-www-form-urlencoded"
        }
        response=requests.request("POST", url, data=payload, headers=headers)
        return response.text

# 初始化工具
tools = [MobileAddress()]
output_parser = AgentOutputParser

# 初始化对话存储,保存上下文
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# 配置agent
chat_agent = ConversationalChatAgent.from_llm_and_tools(
    system_message=SYSTEM_MESSAGE_PREFIX, # 指定提示词前缀
    llm=llm, tools=tools, memory=memory,
    verbose=True # 是否打印调试日志,方便查看每个环节执行情况
)
agent = AgentExecutor.from_agent_and_tools(
    agent=chat_agent, tools=tools, memory=memory, verbose=True,
    max_iterations=3, # 设置大模型循环最大次数,防止无限循环
    output_parser=output_parser
)

@app.post("/v1/tools")
def get_embeddings2(prompt: dict):
    response=str(agent.run(prompt['content']))
    yield response

if __name__ == '__main__':
    uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)

在这里插入图片描述

工具调用

(chatGLM2) PS D:\python_project\m3e-base> & E:/develop/anaconda3/envs/chatGLM2/python.exe d:/python_project/m3e-base/test3.py
INFO:     Started server process [5960]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
E:\develop\anaconda3\envs\chatGLM2\lib\site-packages\langchain_core\_api\deprecation.py:117: LangChainDeprecationWarning: The function `run` was deprecated in LangChain 0.1.0 and will be removed in 0.2.0. Use invoke instead.
  warn_deprecated(


> Entering new AgentExecutor chain...
```json
{
     "action": "searchMobileAddress",
     "action_input": "1769223xxxx"
}
```json
Observation: {"tradeNo":"5494874891139157031","chargeStatus":1,"message":"成功","data":{"orderNo":"111","handleTime":"2024-03-07 15:51:42","province":"河北","city":"保定","provinceCode":"0312","isp":"联通","mobile":"1769223xxxx","postCode":"071000","cityCode":"130600"},"code":"200000"}
Thought:```json
{ 
   "action": "Final Answer", 
   "action_input": "查询电话1769223xxxx的归属地,其归属地为河北保定,移动运营商为中国联通。" 
}
```json

> Finished chain.
INFO:     127.0.0.1:54760 - "POST /v1/tools HTTP/1.1" 200 OK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值