1. 部署DeepSeek模型
确保已经在本地部署了Deepseek模型,例如Ollama进行部署;
2. 安装必要的 Python 库
pip install langchain ollama langchain_community
3. 使用 LangChain 调用本地DeepSeek API
3.1 调用方法1
下面是一个完整的示例代码,展示了如何使用 LangChain 调用本地的 DeepSeek API:
from langchain_community.llms import Ollama
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
# 创建 Ollama 实例,指定模型名称和本地服务地址
llm = Ollama(model="deepseek-r1:32b", base_url="http://localhost:11434")
# 定义提示模板
prompt = PromptTemplate(
input_variables=["question"],
template="请回答以下问题:{question}"
)
# 创建 LLM 链
chain = LLMChain(llm=llm, prompt=prompt)
# 定义问题
question = "1+3=?"
# 调用链进行推理
result = chain.invoke({"question": question})
if isinstance(result, dict):
result = result.get("text", "")
# 打印结果
print(result)
运行结果:
3.2 调用方法2
ChatOpenAI库兼容Deepseek,因此可以使用ChatOpenAI库进行接口调用
pip install langchain-openai
实例化
from langchain_deepseek import ChatDeepSeek
llm = ChatOpenAI(
model="deepseek-v3",
openai_api_key="XXXX",
openai_api_base="XXXXX/v1/",#注意此处url层级到v1
max_tokens=1024,
# 其他参数...
)
messages = [
(
"system",
"您是一个有用的助手,负责将英语翻译成中文。请翻译用户句子。",
),
("human", "I love programming."),
]
ai_msg = llm.invoke(messages)
ai_msg.content
输出结果:
链接
用户可以将模型与提示模板链接,如下所示:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate(
[
(
"system",
"您是一个有用的助手,负责将 {input_language} 翻译成 {output_language}。",
),
("human", "{input}"),
]
)
chain = prompt | llm
chain.invoke(
{
"input_language": "英语",
"output_language": "德语",
"input": "我喜欢编程。",
}
)
运行结果:
4.自定义辅助工具
4.1 简单调用:
import datetime
from langchain.tools import tool
from langchain_openai import ChatOpenAI
# 构建OpenAI客户端
llm = ChatOpenAI(
model="deepseek-v3",
openai_api_key="your api key",
openai_api_base="api url"
)
# 定义⼯具 注意要添加注释
@tool
def add(a: int, b: int) -> int:
"""Adds a and b."""
return a + b
print(add.invoke({"a":11,"b":21}))
结果:
4.2 LangChain调用工具
import datetime
from langchain.tools import tool
from langchain_openai import ChatOpenAI
from langchain.tools.render import render_text_description
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
# 构建OpenAI客户端
llm = ChatOpenAI(
model="deepseek-v3",
openai_api_key="your api key",
openai_api_base="api url"
)
# 定义⼯具 注意要添加注释
@tool
def add(a: int, b: int) -> int:
"""Adds a and b."""
return a + b
@tool
def get_current_date():
"""获取今天⽇期"""
return datetime.datetime.today().strftime("%Y-%m-%d")
tools = [add, get_current_date]
# 构建工具条件和调用描述
rendered_tools = render_text_description(tools)
print("rendered_tools:", rendered_tools)
# 构建系统提示词
system_prompt = f"""
You are an assistant that has access to the following set of tools. Here are the names and descriptions for each tool:
{rendered_tools}
Given the user input, return the name and input of the tool to use. Return your response as a JSON blob with 'name' and 'arguments' keys."""
# 构建输入提示词模板
prompt = ChatPromptTemplate.from_messages(
[("system", system_prompt), ("user", "{input}")]
)
# 构建chain以及最后格式化输出
chain = prompt | llm
print(chain.invoke({"input": "what's 11 + 12"})) # 输出所有结果
tool_map = {tool.name: tool for tool in tools}
def tools_call(model_output):
chosen_tool = tool_map[model_output["name"]]
return chosen_tool.invoke(model_output["arguments"])
# 在链条后面添加JsonOutputParser()和tools_call用来限制输出内容,只输出工具的结果
# 链式组合
chain = prompt | llm| JsonOutputParser() | tools_call
print(chain.invoke({"input": "what's 11 + 33"}))
print(chain.invoke({"input": "what's the date today?"}))
运行结果:
4.3 laggraph调用工具
langgraph.prebuilt.create_react_agent 是 LangGraph 库中的一个预构建函数,位于 langgraph.prebuilt 模块,用于快速创建基于 ReAct(Reasoning + Acting)架构的智能代理。
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
# 构建OpenAI客户端
llm = ChatOpenAI(
model="deepseek-v3",
openai_api_key="your api key",
openai_api_base="api url"
)
agent = create_react_agent(
model=llm,
tools=[get_current_date],
prompt="你是一个有用的助手,负责根据用户提出的问题调用对应的工具获得结果后输出",
)
result = agent.invoke({"messages":[{"role":"user","content":"今天是几月几日?"}]}
print(result["messages"][-1].content)
结果:
5.参考链接
LangChain + DeepSeek全流程开发详解
如何进行工具/函数调用
LangChain工具调用的底层原理进阶