构建具备Tool Calling能力的LLM/Agent的免费本地化方案探究
构建本地化免费LLM/Agent实现Langchain风格工具调用能力
完全可以不依赖付费服务商,通过本地化开源方案实现类似Langchain中tool_calls属性的工具调用能力,以下是具体可行方案:
一、基于开源大模型+LangChain本地集成
这是最贴近Langchain原有逻辑的方案,利用Langchain的工具调用模块搭配本地部署的开源模型:
- 选合适的开源模型:优先选原生支持工具/函数调用的模型,比如Llama 3 8B/70B、Qwen 2 7B/14B、Mistral 7B-Instruct v0.3等,这类模型经过训练能理解工具调用指令并输出规范格式。
- 本地部署模型:用Ollama、Llama.cpp等工具一键部署量化后的模型,大幅降低硬件要求(比如Llama 3 8B量化版只需8GB左右显存)。
- Langchain配置:将Langchain中对接OpenAI的模块替换为本地模型适配类(比如
ChatOllama),定义工具后通过create_tool_calling_agent创建Agent,调用后自动生成带tool_calls属性的响应。
示例代码:
from langchain_ollama import ChatOllama from langchain.tools import CalculatorTool from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate # 初始化本地部署的Llama 3模型 llm = ChatOllama(model="llama3", temperature=0) # 定义计算器工具 tools = [CalculatorTool()] # 配置prompt,明确工具调用规则 prompt = ChatPromptTemplate.from_messages([ ("system", "你是具备工具调用能力的助手,需要计算时必须调用calculator工具。"), ("user", "{input}") ]) # 创建工具调用Agent并执行 agent = create_tool_calling_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools) # 测试调用 response = agent_executor.invoke({"input": "4+4等于多少?"}) # 返回的AIMessage对象会包含tool_calls属性,结构与你提供的示例一致
二、自定义Prompt工程+输出解析(无框架依赖)
如果不想依赖Langchain,可以手动实现工具调用逻辑:
- 编写明确的Prompt:在prompt中强制模型需要调用工具时输出指定格式的JSON,比如:
当你需要调用工具解决问题时,请输出如下格式的内容,不要添加其他文本:
{"tool_calls": [{"name": "工具名称", "args": {"参数名": "参数值"}, "id": "唯一标识", "type": "tool_call"}]} - 本地模型调用:用
transformers库或Ollama调用本地模型,获取输出结果。 - 解析并封装:将模型输出的JSON解析后,手动封装成带
tool_calls属性的对象,完全复刻Langchain的响应结构。
三、基于开源Agent框架本地化部署
用AutoGPT、BabyAGI等开源Agent框架的本地版本,这类框架自带工具调用逻辑,只需配置本地模型路径,就能让Agent自动判断是否调用工具,之后你可以将框架的工具调用输出适配为Langchain的tool_calls格式。
注意事项
- 部分小参数开源模型可能对工具调用的支持不够稳定,需要优化prompt或使用微调后的专用模型。
- 硬件不足时优先选择4-bit/8-bit量化的模型,Ollama提供的模型默认都是量化版,部署门槛极低。
内容的提问来源于stack exchange,提问作者Zen12345
相关产品推荐
相关产品推荐

