文章

使用python在本地进行langchain大模型实战

一、引言

最近学了一些大模型的知识,主要还是以python语言为主,笔者是java开发,对python并不熟悉,借此机会写一写python脚本练手,也进一步巩固大模型相关技术。

二、操作步骤

(一)环境搭建

1.下载python并安装,下载地址:[Download PythonPython.org](https://www.python.org/downloads/)

下载版本:3.14.3

2.创建并激活虚拟环境

1
2
3
4
5
6
7
8
9
    # 创建名为 `langchain_env` 的虚拟环境
    python -m venv langchain_env

    # 激活虚拟环境
    # Windows:
    langchain_env\Scripts\activate

    # 3. 安装依赖
    pip install -r requirements.txt

(二)安装 LangChain 及相关库

1.在激活的虚拟环境中,执行以下命令安装核心框架

1
2
3
4
5
6
7
8
9
10
11
12
13
    # 1. 安装 LangChain 核心包
    pip install langchain langchain-core
    # 2. 安装社区集成包(包含大量工具和适配器)
    pip install langchain-community
    # 3. 安装与 Ollama 对接的专用包[8,14](@ref)
    pip install langchain-ollama
    # 根据你⽤的模型安装对应包
    pip install langchain-openai # OpenAI
    pip install langchain-anthropic # Claude
    pip install dashscope # 通义千问
    # 其他常⽤包
    pip install python-dotenv # 环境变量管理
    pip install langgraph # Agent 运⾏时(新版必装)

(三)部署本地大模型(以 Ollama 为例)

1.下载并安装 Ollama,Ollama官网

2.拉取并运行一个模型

1
2
3
4
5
6
    # 方案A:轻量级,速度快,适合入门(约4GB)
    ollama pull qwen2.5:0.5b-instruct
    # 方案B:能力更强,资源占用适中(约5GB)[8](@ref)
    ollama pull qwen2.5:7b-instruct
    # 方案C:最新版,综合能力强(约5GB)
    ollama pull qwen3:7b-instruct

3.查看本地下载的大模型

1
2
3
    ollama list
    NAME           ID              SIZE      MODIFIED
    qwen3-vl:8b    901cae732162    6.1 GB    7 minutes ago

4.运行模型服务:安装后,Ollama 会在后台自动运行服务(默认地址:http://localhost:11434

(四)编写第一个 LangChain 应用

1.编写app.py,指定使用的模型和用途

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    from langchain_ollama import ChatOllama
    from langchain_core.prompts import ChatPromptTemplate
    # 1. 初始化本地大模型[8](@ref)
    # 确保这里的 model 名称与您用 `ollama pull` 下载的名称一致
    llm = ChatOllama(
        model="qwen3-vl:8b",  # 替换成您下载的模型名
        base_url="http://localhost:11434",
        temperature=0.2,  # 控制创造性,越低越稳定
        streaming=True,   # 启用流式输出,体验更好
    )
    # 2. 创建一个提示模板[1](@ref)
    prompt = ChatPromptTemplate.from_messages([
        ("system", "你是一个乐于助人的AI助手,请用中文简洁地回答用户问题。"),
        ("user", "{input}")
    ])

    # 3. 使用 LangChain 表达式语言 (LCEL) 将提示和模型组合成链[1](@ref)
    chain = prompt | llm

    # 4. 调用链并获取回答
    question = "请用简单的语言解释什么是 LangChain?"
    print(f"问题:{question}")
    print("回答:", end="")

    # 流式输出回答[8](@ref)
    for chunk in chain.stream({"input": question}):
        print(chunk.content, end="", flush=True)

2.在上面激活的langchain_env环境下执行app.py文件

1
python app.py

3.执行后输出大模型的回答

1
2
3
4
5
6
7
8
    (langchain_env) C:\Users\wys19>D:
    (langchain_env) D:\>cd D:\大模型\执行文件
    (langchain_env) D:\大模型\执行文件>python app.py
    C:\Users\wys19\langchain_env\Lib\site-packages\langchain_core\_api\deprecation.py:25: UserWarning: Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater.
      from pydantic.v1.fields import FieldInfo as FieldInfoV1
    问题:请用简单的语言解释什么是 LangChain?
    回答:LangChain 是一个开源工具包,专门用来简化用大型语言模型(如 ChatGPT)开发应用的过程。它提供模块化组件,比如提示模板和数据处理工具,让开发者快速构建聊天机器人或问答系统等。简单说,它帮你轻松“连接”语言模型,做实际应用。
    (langchain_env) D:\大模型\执行文件>

(五)使用API Key调用大模型

  1. 阿里千问大模型 1.1千问密钥: API-KEY:sk-03cbf***********7052471bd0e(使用大模型时配置) 通行密钥:sk-dashscope-**(暂时未用到) 1.2使用千问模型时直接设置API-KEY:

    1
    2
    3
    
       import os
       from langchain_community.chat_models import ChatTongyi
       from langchain_core.prompts import ChatPromptTemplate
    

    设置通义千问 API 密钥

    1
    
    os.environ["DASHSCOPE_API_KEY"] = "sk-03cbf***********7052471bd0e"
    

    初始化通义千问模型

    1
    2
    3
    4
    5
    
    llm = ChatTongyi(
       model="qwen-max",  # 可选模型:qwen-max(最强), qwen-plus, qwen-turbo(最快)
       temperature=0.8,
       streaming=True
    )
    

    后续构建链和调用的代码与之前完全相同

    1
    2
    3
    4
    5
    
    prompt = ChatPromptTemplate.from_messages([
       ("system", "你是一个专业的AI助手。"),
       ("user", "{input}")
    ]) 
    chain = prompt | llm response = chain.invoke({"input": "请解释什么是 LangChain?"}) print(response.content)
    

    调用大模型示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
        import os
        from dotenv import load_dotenv
        from openai import OpenAI
        # 加载环境变量
        load_dotenv()
        # 初始化客户端
        client = OpenAI(
            api_key=os.getenv("DASHSCOPE_API_KEY"),
            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
        )
       
        # 调用通义千问
        def call_qwen(prompt, model="qwen-turbo"):
            response = client.chat.completions.create(
                model=model,
                messages=[
                    {"role": "system", "content": "你是一个乐于助人的助手。"},
                    {"role": "user", "content": prompt}
                ],
                temperature=float(os.getenv("TEMPERATURE", "0.7")),
                max_tokens=int(os.getenv("MAX_TOKENS", "1000"))
            )
            return response.choices[0].message.content
       
        # 使用
        result = call_qwen("你好,介绍一下你自己")
        print(result)
    

调用大模型示例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
    from dotenv import load_dotenv
    import os
    load_dotenv()
    # 通义千问⽰例
    from langchain_community.chat_models import ChatTongyi

    llm = ChatTongyi(
        model="qwen-turbo",
        dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
    )

    response = llm.invoke("你好,请⽤⼀句话介绍⾃⼰")
    print(response.content)

(六)Prompt提示词模板

调用大模型创建聊天模板并提问:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    from langchain_core.prompts import ChatPromptTemplate
    from dotenv import load_dotenv
    import os
    load_dotenv()
    # 通义千问⽰例
    from langchain_community.chat_models import ChatTongyi

    llm = ChatTongyi(
        model="qwen-turbo",
        dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
    )

    # 定义多轮对话模板
    chat_template = ChatPromptTemplate.from_messages([
    ("system", "你是⼀位{role},擅⻓⽤简洁易懂的⽅式解释复杂概念。"),
    ("human", "请解释⼀下:{concept}"),
    ])
    # ⽣成消息列表
    messages = chat_template.format_messages(
    role="物理学教授",
    concept="量⼦纠缠"
    )
    # 调⽤模型
    response = llm.invoke(messages)
    print(response.content)

调用大模型创建示例模板并提问:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    from langchain_core.prompts import ChatPromptTemplate
    from dotenv import load_dotenv
    import os
    load_dotenv()
    # 通义千问⽰例
    from langchain_community.chat_models import ChatTongyi

    llm = ChatTongyi(
        model="qwen-turbo",
        dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
    )

    # 定义⽰例
    examples = [
    {"input": "开⼼", "output": "我今天⾮常开⼼!"},
    {"input": "难过", "output": "我感到有些难过..."},
    ]
    # 创建包含⽰例的模板
    few_shot_template = ChatPromptTemplate.from_messages([
    ("system", "你是⼀个情绪表达助⼿。"),
    ("human", "⽰例:\n情绪: 开⼼\n表达: 我今天⾮常开⼼!\n\n情绪: 难过\n表达: 我感到有些难过..."),
    ("human", "现在请表达这个情绪: {emotion}")
    ])

    messages = few_shot_template.format_messages(emotion="兴奋")# 调⽤模型
    response = llm.invoke(messages)
    print(response.content)

调用大模型动态填充日期并提问:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    from dotenv import load_dotenv
    import os
    load_dotenv()
    # 通义千问⽰例
    from langchain_community.chat_models import ChatTongyi
    from datetime import datetime
    from langchain_core.prompts import PromptTemplate

    llm = ChatTongyi(
        model="qwen-turbo",
        dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
    )

    template = PromptTemplate(
    template="今天是{date},请告诉我关于{topic}的最新消息。",
    input_variables=["topic"],
    partial_variables={
    "date": datetime.now().strftime("%Y年%m⽉%d⽇") # ⾃动填充
    }
    )

    # 只需要传 topic
    prompt = template.format(topic="黄金价格")

    response = llm.invoke(prompt)
    print(response.content)

(七)Tools工具定义

1.定义数据计算器工具类并调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    from langchain_core.tools import BaseTool
    from pydantic import BaseModel, Field
    from typing import Type
    # 定义输⼊参数结构
    class CalculatorInput(BaseModel):
          expression: str = Field(description="数学表达式,如 '2+2''10*5'")
    class Calculator(BaseTool):
        name: str = "calculator"
        description: str = "执⾏数学计算"
        args_schema: Type[BaseModel] = CalculatorInput

        def _run(self, expression: str) -> str:
            """同步执⾏"""
            try:
                result = eval(expression)
                return f"计算结果: {expression} = {result}"
            except Exception as e:
                return f"计算错误: {str(e)}"
        async def _arun(self, expression: str) -> str:
            """异步执⾏(可选实现)"""
            return self._run(expression)

    # 使⽤
    calc = Calculator()
    result = calc.invoke({"expression": "123 * 456"})
    print(result) # 计算结果: 123 * 456 = 56088

2.把定义好的工具绑定到模型,让模型自己选择使用的工具:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    from langchain_core.tools import BaseTool
    from pydantic import BaseModel, Field
    from typing import Type
    # 定义输⼊参数结构
    class CalculatorInput(BaseModel):
          expression: str = Field(description="数学表达式,如 '2+2''10*5'")
    class Calculator(BaseTool):
        name: str = "calculator"
        description: str = "执⾏数学计算"
        args_schema: Type[BaseModel] = CalculatorInput

        def _run(self, expression: str) -> str:
            """同步执⾏"""
            try:
                result = eval(expression)
                return f"计算结果: {expression} = {result}"
            except Exception as e:
                return f"计算错误: {str(e)}"
        async def _arun(self, expression: str) -> str:
            """异步执⾏(可选实现)"""
            return self._run(expression)

    from dotenv import load_dotenv
    import os

    load_dotenv()

    # 通义千问⽰例
    from langchain_community.chat_models import ChatTongyi

    llm = ChatTongyi(
        model="qwen-turbo",
        dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
    )

    # 创建⼯具列表
    tools = [ Calculator()]
    # 绑定到模型
    llm_with_tools = llm.bind_tools(tools)
    # 现在模型知道有这些⼯具可⽤了
    response = llm_with_tools.invoke("1024*11")

    # 检查模型是否决定调⽤⼯具
    if response.tool_calls:
        for tool_call in response.tool_calls:
            print(f"模型想调⽤: {tool_call['name']}")
            print(f"传⼊参数: {tool_call['args']}")

(八)Agent智能代理

1.LangChain 1.0+ 新版 Agent,新版⽤ create_agent ,底层基于 LangGraph,更稳定:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
    from langchain.agents import create_agent
    from langchain_core.tools import tool
    from langchain_community.chat_models import ChatTongyi
    import os
    # 1. 初始化模型
    from dotenv import load_dotenv
    load_dotenv()
    llm = ChatTongyi(
        model="qwen-plus",
        dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
    )

    # 2. 定义⼯具  
    @tool
    def get_weather(city: str) -> str:      
        """获取城市天⽓信息 """
        weather_db = {
               "北京": "晴天 ,15-25度 ",
               "上海": "多云 ,18-28度 ",
               "深圳": "⼩⾬ ,20-30度 ",
        }
        return weather_db.get(city, f"{city}的天⽓信息暂不可⽤")

    @tool
    def calculator(expression: str) -> str:        
        """执⾏数学计算 """
        try:
            result = eval(expression)
            return f"计算结果 : {expression} = {result}"
        except:
            return "计算错误 "

    @tool
    def search_knowledge(query: str) -> str:        
        """搜索知识库 """
        knowledge = {
            "LangChain": "LangChain是⼀个⽤于开发LLM应⽤的框架 ,⽀持⼯具、代理、 内存管理等功能。 ",
            "机器学习": "机器学习是AI的⼦集 ,让系统能从数据中⾃动学习和改进。 ",
        }
        for key, value in knowledge.items():
             if key in query:
                return value
        return f"未找到关于'{query}'的信息 "

    # 3. 创建 Agent
    agent = create_agent(
          model=llm,
          tools=[get_weather, calculator, search_knowledge],
          system_prompt="你是⼀个专业的中⽂助⼿ 。仔细分析⽤户问题 ,选择合适的⼯具来回答。 "
      ) 
    # 4. 使⽤ Agent
    result = agent.invoke({
           "messages": [{"role": "user", "content": "上海今天天气怎么样?"}]
      }) 
    # 获取回答
    final_message = result["messages"][-1]
    print(f"回答 : {final_message.content}")

2.Agent处理多个问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
    from langchain.agents import create_agent
    from langchain_core.tools import tool
    from langchain_community.chat_models import ChatTongyi
    import os
    # 1. 初始化模型
    from dotenv import load_dotenv
    load_dotenv()
    llm = ChatTongyi(
        model="qwen-plus",
        dashscope_api_key=os.getenv("DASHSCOPE_API_KEY")
    )

    # 2. 定义⼯具  
    @tool
    def get_weather(city: str) -> str:      
        """获取城市天⽓信息 """
        weather_db = {
               "北京": "晴天 ,15-25度 ",
               "上海": "多云 ,18-28度 ",
               "深圳": "⼩⾬ ,20-30度 ",
        }
        return weather_db.get(city, f"{city}的天⽓信息暂不可⽤")

    @tool
    def calculator(expression: str) -> str:        
        """执⾏数学计算 """
        try:
            result = eval(expression)
            return f"计算结果 : {expression} = {result}"
        except:
            return "计算错误 "

    @tool
    def search_knowledge(query: str) -> str:        
        """搜索知识库 """
        knowledge = {
            "LangChain": "LangChain是⼀个⽤于开发LLM应⽤的框架 ,⽀持⼯具、代理、 内存管理等功能。 ",
            "机器学习": "机器学习是AI的⼦集 ,让系统能从数据中⾃动学习和改进。 ",
        }
        for key, value in knowledge.items():
             if key in query:
                return value
        return f"未找到关于'{query}'的信息 "

    # 3. 创建 Agent
    agent = create_agent(
          model=llm,
          tools=[get_weather, calculator, search_knowledge],
          system_prompt="你是⼀个专业的中⽂助⼿ 。仔细分析⽤户问题 ,选择合适的⼯具来回答。 "
      ) 

    test_queries = [
        "北京今天天⽓怎么样?",
        "给我讲讲什么是机器学习",
        "计算 123 * 456",
    ]

    # 4. 使⽤ Agent
    for query in test_queries:
      print(f"\n⽤⼾: {query}")
      result = agent.invoke({
        "messages": [{"role": "user", "content": query}]
      })
      # 获取回答
      final_message = result["messages"][-1]
      print(f"助⼿: {final_message.content}")

(九)在VS Code中新建一个项目并运行

1.下载并安装VS Code,下载地址:https://code.visualstudio.com/

2.下载并安装Python,下载地址:[Download PythonPython.org](https://www.python.org/downloads/)
1
2
3
4
5
    # 安装后验证: 
    python --version 
    # 应显示:Python 3.x.x 
    pip --version 
    # 应显示:pip 23.x.x

3.配置VS Code

    3.1安装扩展:

        Python(Microsoft 官方) - 提供 Python 支持        

        Pylance(Microsoft 官方) - 智能代码补全        

        Python Debugger​ - 调试支持        

        Python Test Explorer​ - 测试支持(可选)       

        Code Runner​ - 快速运行代码        

        Python Indent​ - 缩进辅助        

        autoDocstring​ - 自动生成文档字符串        

        GitLens​ - Git 增强

    3.2配置 Python 解释器:

        按 Ctrl+Shift+P打开命令面板        

        输入 Python: Select Interpreter        

        选择您安装的 Python 版本

4.创建Python项目

    4.1创建项目文件夹,比如:smart_assistant

    4.2用 VS Code 打开项目文件夹(File-open folder)

    4.3创建项目结构     my_python_project/ ├── .vscode/ # VS Code 配置 │ └── settings.json # 项目设置 ├── src/ # 源代码 │ └── main.py     │   └── tools/ # ⼯具定义 │       ├── weather.py │     ├── calculator.py │     └── translator.py ├── tests/ # 测试代码 │ └── test_main.py ├── requirements.txt # 依赖包列表 ├── README.md # 项目说明 └── .env # 配置大模型的API-key

    4.4配置项目设置

    .vscode/settings.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        {
        // Python 相关设置
        "python.defaultInterpreterPath": "${workspaceFolder}/venv/Scripts/python.exe",
        "python.analysis.autoImportCompletions": true,
        "python.analysis.autoSearchPaths": true,
        "python.analysis.typeCheckingMode": "basic",
        "python.languageServer": "Pylance",
        // 代码格式化
        "[python]": {
            "editor.formatOnSave": true,
            "editor.codeActionsOnSave": {
                "source.organizeImports": "always"
            }
        },
        // 终端设置
        "terminal.integrated.defaultProfile.windows": "Command Prompt",
        "terminal.integrated.shell.windows": "cmd.exe",
        // 文件排除
        "files.exclude": {
            "**/__pycache__": true,
            "**/.pytest_cache": true,
            "**/.mypy_cache": true
        },

        // 代码运行器
        "code-runner.executorMap": {
            "python": "python -u"
        },
        "code-runner.runInTerminal": true,
        "code-runner.saveFileBeforeRun": true
    }

.env

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     # ===== 阿里云通义千问 =====
    DASHSCOPE_API_KEY=sk-03cbfdxxxxxxxxxxxxxfd7052471bd0e
    QWEN_MODEL=qwen-plus
    QWEN_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
    # ===== Anthropic Claude =====
    #ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    #CLAUDE_MODEL=claude-3-5-sonnet-20241022
    # ===== OpenAI =====
    #OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    #OPENAI_MODEL=gpt-4o
    #OPENAI_BASE_URL=https://api.openai.com/v1
    # ===== 通用配置 =====
    TEMPERATURE=0.7
    MAX_TOKENS=2000
    TIMEOUT=30

5.创建虚拟环境

    5.1在VC Code中点击顶部菜单:终端 → 新建终端

    5.2输入指令创建并激活虚拟环境 # 在项目根目录执行 python -m venv venv # 验证创建成功 dir venv # Windows # Windows 激活虚拟环境 venv\Scripts\activate

    5.3配置 VS Code 使用虚拟环境

  • Ctrl+Shift+P

  • 输入 Python: Select Interpreter

  • 选择 ./venv/Scripts/python.exe

6.编写工程

    6.1创建main.py及其他工具定义

    main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
    import os
    from dotenv import load_dotenv
    from pydantic import SecretStr
    # 加载环境变量
    load_dotenv()
    from langchain.agents import create_agent
    from langchain_community.chat_models import ChatTongyi
    from langgraph.checkpoint.memory import MemorySaver
    # 导⼊⼯具
    from tools.weather import get_weather
    from tools.calculator import calculator
    from tools.translator import translate
    # 系统提⽰词
    SYSTEM_PROMPT = """
    你是⼩智,⼀个全能智能助⼿。
    你可以帮⽤⼾:
    • 查询天⽓:查询中国主要城市的天⽓
    • 数学计算:进⾏各种数学运算
    • ⽂本翻译:将中⽂翻译成其他语⾔
    ⼯作原则:
    1. 先理解⽤⼾意图,选择合适的⼯具
    2. 如果不确定,可以询问⽤⼾
    3. 回答简洁明了,有帮助
    """
    from langchain_community.chat_models import ChatOllama
    def create_assistant():
        """创建智能助⼿"""
        # 初始化模型
        llm = ChatTongyi(
            model="qwen-plus",
            temperature=0.7,
            dashscope_api_key=os.environ.get("DASHSCOPE_API_KEY")
        )
        # 创建记忆
        checkpointer = MemorySaver()
        # 创建 Agent
        agent = create_agent(
            model=llm,
            tools=[get_weather, calculator, translate],
            system_prompt=SYSTEM_PROMPT,
            checkpointer=checkpointer
        )
        return agent

    def main():
        """主函数"""
        print("=" * 50)
        print(" ⼩智 - 全能智能助⼿ v1.0")
        print("=" * 50)
        print("输⼊ 'quit' 退出\n")
        agent = create_assistant()
        config = {"configurable": {"thread_id": "main"}}
        while True:
            user_input = input("你: ").strip()
            if user_input.lower() in ['quit', '退出', 'exit']:
                print("再⻅!")
                break
            if not user_input:
                continue
            try:
                result = agent.invoke(
                    {"messages": [{"role": "user", "content": user_input}]},
                    config
                )
                response = result["messages"][-1].content
                print(f"⼩智: {response}\n")
            except Exception as e:
                print(f"出错了: {str(e)}\n")

    if __name__ == "__main__":
        main()

     calculator.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    from langchain_core.tools import tool
    @tool
    def calculator(expression: str) -> str:
        """
        执⾏数学计算
        Args:
            expression: 数学表达式,如 "2+2""(10*5)+20""2**8"
        """
        try:
            # 安全检查
            allowed_chars = set('0123456789+-*/(). ')
            if not all(c in allowed_chars for c in expression.replace('**', '')):
                return "表达式包含⾮法字符"
            result = eval(expression, {"__builtins__": {}}, {})
            if isinstance(result, float) and result.is_integer():
                result = int(result)
            return f"计算结果:{expression} = {result}"
        except ZeroDivisionError:
            return "错误:除数不能为零"
        except Exception as e:
            return f"计算错误:{str(e)}"

    weather.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    from langchain_core.tools import tool
    from datetime import datetime
    @tool
    def get_weather(city: str) -> str:
        """
        获取指定城市的实时天⽓信息
        Args:
        city: 城市名称,⽀持北京、上海、⼴州、深圳、杭州等
        """
        weather_database = {
            "北京": {"condition": "晴天", "temp": "15-25°C", "aqi": ""},
            "上海": {"condition": "多云", "temp": "18-28°C", "aqi": ""},
            "深圳": {"condition": "⼩⾬", "temp": "22-30°C", "aqi": ""},
            "杭州": {"condition": "阴天", "temp": "17-26°C", "aqi": ""},
            "⼴州": {"condition": "晴天", "temp": "20-32°C", "aqi": ""},
        }
        if city not in weather_database:
            return f"暂⽆{city}的天⽓数据,⽀持城市:北京、上海、深圳、杭州、⼴州"
        data = weather_database[city]
        return f"""
    {city} 天⽓预报
    ━━━━━━━━━━━━━━━━
    天⽓:{data['condition']}
    温度:{data['temp']}
    空⽓质量:{data['aqi']}
    更新时间:{datetime.now().strftime("%H:%M")}
        """.strip()

    translator.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    from langchain_core.tools import tool
    @tool
    def translate(text: str, target_language: str = "英⽂") -> str:
        """
        将中⽂⽂本翻译成其他语⾔(模拟)
        Args:
            text: 要翻译的中⽂⽂本
        target_language: ⽬标语⾔,⽀持"英⽂""⽇⽂""韩⽂"
        """
        translations = {
            "你好": {"英⽂": "Hello", "⽇⽂": "こんにちは", "韩⽂": "안녕하세요"},
            "谢谢": {"英⽂": "Thank you", "⽇⽂": "ありがとう", "韩⽂": "감사합니다"},
            "再⻅": {"英⽂": "Goodbye", "⽇⽂": "さようなら", "韩⽂": "안녕히 가세요"},
        }
        if text in translations and target_language in translations[text]:
            result = translations[text][target_language]
            return f"翻译结果:'{text}' → [{target_language}] {result}"
        return f"暂不⽀持'{text}'{target_language}翻译"

   6.2下载用到的安装包

1
2
3
4
5
6
7
8
9
10
11
    # 1. 安装 LangChain 核心包
    pp install langchain langchain-core
    # 2. 安装社区集成包(包含大量工具和适配器)
    pip install langchain-community
    # 根据你⽤的模型安装对应包
    pip install dashscope # 通义千问
    # 其他常⽤包
    pip install python-dotenv # 环境变量管理
    pip install langgraph # Agent 运⾏时(新版必装)
    #注意:如果项目中有requirements.txt,那么只要安装这个文件的依赖即可
    pip install -r requirements.txt

7.点击执行按钮(Run as Python File)即可。

三、总结

总体来说,python语言还是非常简洁优美的,运行也比较方便,不过我老本行是java开发,所以python只是蜻蜓点水,学习一下大模型的概念思维,后面还是学习spring ai框架来做大模型开发。


作者:吴银双

日期:2026年4月17日

平台:GitHub Pages / 技术博客

本文由作者按照 CC BY 4.0 进行授权