LangChain 使用
参考的教程
https://www.runoob.com/langchain/langchain-tutorial.html
调用模型
# 使用智谱api:https://open.bigmodel.cn/apikey/platform
# -*- coding:utf-8 -*-
from langchain_openai import ChatOpenAI
# 初始化模型
llm = ChatOpenAI(
model="glm-5.2", # 文本模型
openai_api_key="", # 智谱API Key
openai_api_base="https://open.bigmodel.cn/api/paas/v4", # API 地址
temperature=0.7, # 控制模型输出的随机程度
max_tokens=1024 # 控制模型输出的最大长度
)
# invoke(): 向模型发送提示词并等待回复
response = llm.invoke("你好,请做一个简短的自我介绍。")
print(response.content)
调用工具
通过 @tool 装饰器,你可以将任何 Python 函数快速转换为 Agent 可调用的工具。
# -*- coding:utf-8 -*-
from langchain.messages import HumanMessage
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from langchain.tools import tool
@tool
def search_courses(keyword: str) -> str:
"""在菜鸟教程 RUNOOB 中搜索课程。传入关键词返回相关课程列表。
Args:
keyword: 搜索关键词,如 python、html、java
"""
courses = {
"python": "Python3 基础教程、Python 数据分析、Python 爬虫入门",
"html": "HTML 基础教程、HTML5 新特性、HTML 表单实战",
"java": "Java 基础教程、Java 面向对象、Java Spring 框架",
}
return courses.get(keyword.lower(), f"未找到与 {keyword} 相关的课程")
@tool
def get_course_detail(course_name: str) -> str:
"""获取指定课程的详细信息,包括章节数和学习时长。
Args:
course_name: 课程名称,如 "Python3 基础教程"
"""
details = {
"python3 基础教程": "共 30 章,预计学习时长 20 小时,适合零基础入门",
"html 基础教程": "共 25 章,预计学习时长 15 小时,适合零基础入门",
}
return details.get(
course_name.lower(),
f"{course_name} 详情:适合初学者,内容丰富,附带实战案例"
)
llm = ChatOpenAI(
model="glm-5.2", # 文本模型
openai_api_key="xxxx", # 智谱 API Key(在 https://open.bigmodel.cn 控制台获取)
openai_api_base="https://open.bigmodel.cn/api/paas/v4", # 智谱 GLM 的 API 地址
temperature=0.5,
max_tokens=1024
)
# 创建智能体
agent = create_agent(
model=llm,
tools=[search_courses, get_course_detail],
system_prompt="你是菜鸟教程 RUNOOB 的学习顾问,帮助用户找到合适的课程。",
)
# 运行时需要提供自定义状态的初始值
print("实时流式输出:")
for msg_chunk, metadata in agent.stream(
{"messages": [HumanMessage(content="我想学 Python,有什么课程推荐?")]},
stream_mode="messages",
):
# 打印工具调用(tool_calls 在 chunk 中一次性给出)
if hasattr(msg_chunk, "tool_calls") and msg_chunk.tool_calls:
for tc in msg_chunk.tool_calls:
print(f"\n[调用工具] {tc['name']}({tc.get('args', {})})")
# msg_chunk 是 AIMessageChunk
# 每个 chunk 只包含一小段内容
if msg_chunk.content:
print(msg_chunk.content, end="", flush=True)
print() # 最后换行
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
文章标题:LangChain 使用
本文作者:伟生
发布时间:2026-08-23, 16:15:00
最后更新:2026-08-23, 17:03:26
原始链接:http://yoursite.com/2026/08/23/ai_01_learn_langchain_02/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。