Abstract
Model 模块是 LangChain 与底层 LLM 之间的“抽象层”和“通用接口”。极大地降低了大语言模型集成的复杂度和切换成本,是构建复杂 LLM 应用链路的坚实基础,这篇文章简单介绍model使用过程。
依赖安装
langchainlangchain-ollama
创建Model
创建一个model有2种方式,1:使用通用函数init_chat_model,2:使用特定的类
- 方式1,通过
init_chat_model初始化一个model,如果是常见的模型提供商只需要一个model=模型名称,如果不是常用模型提供商还需要设置model_provider以及base_url,和必要的api_key.常用的模型
model=init_chat_model(
model="qwen3",
api_key="",
base_url=""
)
- 方式2,通过特定的model类,比如
deepseek的ChatDeepSeek,微软的AzureChatOpenAI参考文档
model=ChatDeepSeek(
model="deepseek-chat",
api_key=""
)
- 参数,还可以设置如下几个参数
- temperature
- max_tokens
- timeout
- max_retries
- 以及
model其他的内部参数,使用**kwargs方式设置
- 每种
model都需要安装对应的依赖,pip3 install langchain-模型
本地模型
通过ollama使用本地部署的模型,可以使用ChatOllama类创建一个模型,创建时需要指定模型名称
model=ChatOllama(
model="qwen3"
)
模型的使用
- 模型直接使用
model.invoke(message) - 模型流式输出
model.stream(message) - 批量询问
model.batch(["","",""]) Tools使用,这个首先需要查询下model是否支持tools,然后model绑定工具,
# 绑定工具
model_with_tools=model.bind_tools([])
result=model_with_tools.invoke("")
for tool_call in result.tool_calls:
# tools调用
print(tool_call)
工具定义,使用装饰器(@tool)注释函数,生成一个tool
@tool("search_company", description="使用公司名称查询股票代码")
def search_code(name:str)->str:
"""
使用公司名称查询股票代码
Args:
name: 公司名称
Returns:
股票代码
"""
companys={'中芯国际':'00981'}
# 搜索公司名称
if name in companys.keys():
stock_code=f"{name} 的股票代码为 {companys[name]}"
else:
stock_code="没有查询到该公司的股票代码"
return stock_code
返回信息
{'name': 'search_code', 'args': {'name': '中芯国际'}, 'id': '9bc4d138-e593-43d7-900e-ea3383fa4beb', 'type': 'tool_call'}
返回的信息包含一个函数调用参数,通过这个返回信息调用工具函数.
ai_message=model_with_tools.invoke("")
for tool_call in ai_message.tool_calls:
r=search_code.invoke(tool_call)
返回结果
content='中芯国际 的股票代码为 00981' name='search_code' tool_call_id='9bc4d138-e593-43d7-900e-ea3383fa4beb'
- 将调用
tools返回的信息,组合到已有信息中,再次调用model
for tool_call in ai_message.tool_calls:
r=search_code.invoke(tool_call)
if r.content:
messages.append(r)
result=model_with_tools.invoke(messages)
- 强制model使用tools:在绑定
tools时可以使用search_code],tool_choice="search_code")参数,指定只tools使用 - 流式响应,通过
model_with_tools.stream()可以得到流式输出 - 有些模型支持服务端的tools调用,model直接调用tools的结果放在messages中提供给model输出,不需要手动调用tools
- 多态模型,有些模型可以输出图像+文字
17万+

被折叠的 条评论
为什么被折叠?



