LangChain 使用

  1. 参考的教程
  2. 调用模型
  3. 调用工具

参考的教程

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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏