Qwen3-0.6B + LangChain 实战教学,边学边做
1. 引言:为什么是 Qwen3-0.6B 和 LangChain 的组合?
你有没有试过——刚下载好一个大模型,却卡在“怎么让它真正干活”这一步?不是不会跑 inference,而是不知道怎么把它嵌入到自己的工作流里:
- 想让模型记住对话历史,但每次调用都是“失忆”状态;
- 想让它查本地文档、读 Excel 表格,结果只能干巴巴地回答“我不知道”;
- 想加个简单记忆、加个工具调用、再串个条件分支,代码越写越像“胶水工程”……
别急。这不是你技术不行,而是缺了一层能力编排层。
LangChain 就是这层“智能胶水”——它不训练模型,也不替代模型,但它能把 Qwen3-0.6B 这样的轻量高性能模型,快速变成一个有记忆、懂上下文、能调工具、会分步骤思考的实用助手。
而 Qwen3-0.6B 正是这个组合里的理想搭档:
参数仅 0.6B,本地 GPU(甚至高端消费级显卡)就能流畅运行;
基于 Qwen3 系列最新架构,指令遵循强、推理逻辑稳、中英文双优;
已预置在 CSDN 星图镜像中,开箱即用,无需手动下载权重、配置环境、调试端口。
本文不讲抽象概念,不堆理论公式。我们打开 Jupyter,一行行敲、一步步跑、实时看效果——
从零启动 → 连通模型 → 构建对话链 → 加入记忆 → 调用外部工具 → 完整实战案例,全部实操落地。
你不需要提前装任何包,不需要配 CUDA 版本,不需要改 config 文件。只要点开镜像里的 Jupyter,复制粘贴,就能跟着做。
2. 快速启动:三步连通 Qwen3-0.6B
2.1 启动镜像并进入 Jupyter
镜像已预装完整环境(Python 3.10 + PyTorch 2.3 + Transformers 4.45 + LangChain 0.3.x)。
只需在 CSDN 星图镜像控制台点击「启动」→ 等待状态变为「运行中」→ 点击「Jupyter」按钮,自动跳转至 notebook 界面。
小提示:镜像默认开放 8000 端口,服务地址形如
https://gpu-pod694e6fd3bffbd265df09695a-8000.web.gpu.csdn.net—— 这个地址就是后续 LangChain 调用的 base_url。
2.2 用 LangChain 调通基础模型
复制以下代码到第一个 cell,执行:
from langchain_openai import ChatOpenAI import os chat_model = ChatOpenAI( model="Qwen-0.6B", temperature=0.5, base_url="https://gpu-pod694e6fd3bffbd265df09695a-8000.web.gpu.csdn.net/v1", # 替换为你自己的实际地址(注意末尾 /v1) api_key="EMPTY", extra_body={ "enable_thinking": True, "return_reasoning": True, }, streaming=True, ) response = chat_model.invoke("你是谁?请用一句话介绍自己,并说明你支持哪些语言。") print(response.content)执行成功后,你会看到类似这样的输出:
我是通义千问 Qwen3-0.6B,阿里巴巴研发的新一代轻量级大语言模型,支持中文、英文、法语、西班牙语、葡萄牙语、俄语、阿拉伯语、日语、韩语、越南语、泰语、印尼语等多种语言。
关键点解析:
base_url必须带/v1,这是 OpenAI 兼容 API 的标准路径;api_key="EMPTY"是镜像服务的固定认证方式,不是占位符;extra_body中的"enable_thinking": True开启了 Qwen3 的思维链(Chain-of-Thought)能力,模型会在生成最终答案前先“打草稿”;streaming=True让输出逐字返回,适合做流式 UI,这里先保留,后续实战中会用上。
2.3 验证模型响应质量:一个真实小测试
我们来测一个稍有挑战的指令,检验它的理解与结构化能力:
test_prompt = """请将以下三句话整理成一段逻辑连贯、语义完整的文字,要求: - 不新增信息,不删减要点; - 使用书面语,避免口语词; - 最后用【总结】开头给出一句核心结论。 1. 用户反馈 App 启动慢,平均耗时 4.2 秒 2. 日志显示 70% 请求卡在图片资源加载阶段 3. 当前图片未启用 WebP 格式和懒加载""" result = chat_model.invoke(test_prompt) print(result.content)你大概率会看到一段条理清晰、符合所有要求的改写结果。这说明:
🔹 Qwen3-0.6B 不只是“接话”,它真能理解任务约束;
🔹 LangChain 的invoke()方法已成功把 prompt、参数、流式开关等封装到位,你只管“说人话”。
3. 构建对话链:让模型记住上下文
3.1 为什么需要 MessageHistory?
单纯调invoke()是“无状态”的:每次提问都像第一次见面。但真实场景中,用户会说:
“帮我写一封辞职信。”
“改成语气更委婉一点。”
“加上我入职三年这个信息。”
没有历史,第二句“改成……”就失去参照;没有结构,第三句“加上……”就不知道加在哪。
LangChain 提供了ConversationBufferMemory—— 一个轻量、易用、纯内存的对话记忆模块。
3.2 实现带记忆的对话链
from langchain.chains import ConversationChain from langchain.memory import ConversationBufferMemory # 初始化记忆模块(默认保存最近 10 轮) memory = ConversationBufferMemory() # 构建对话链 conversation = ConversationChain( llm=chat_model, memory=memory, verbose=False # 设为 True 可看内部 prompt 拼接过程,调试时推荐 ) # 第一轮:发起任务 print("【用户】", "帮我写一封辞职信。") response1 = conversation.predict(input="帮我写一封辞职信。") print("【模型】", response1.strip()) # 第二轮:基于上文修改 print("\n【用户】", "改成语气更委婉一点。") response2 = conversation.predict(input="改成语气更委婉一点。") print("【模型】", response2.strip()) # 查看当前记忆内容(可选) print("\n--- 当前记忆摘要 ---") print(memory.buffer_as_str[:200] + "...")输出效果示意:
【用户】 帮我写一封辞职信。
【模型】 尊敬的领导:您好!……(略)
【用户】 改成语气更委婉一点。
【模型】 尊敬的领导:您好!首先衷心感谢公司在我任职期间给予的信任与培养……(明显更柔和)
技术本质:ConversationBufferMemory会把每轮input和response自动拼成<role>: <content>格式,追加到history字段中,再整体注入下一次 prompt。你完全不用手动拼字符串。
注意:该 memory 默认只存文本,不存 token 数或时间戳。如需长期记忆、数据库持久化,后续可升级为ConversationSummaryMemory或对接 Redis,但对本次教学,“够用+易懂”是第一原则。
4. 接入外部工具:让模型“能做事”,不止“会说话”
4.1 场景驱动:为什么工具调用是质变?
Qwen3-0.6B 再强,也只是语言模型——它不能实时查天气、不能读你电脑里的 PDF、不能调用企业内部 API。
但 LangChain 的Tool机制,能让它“指哪打哪”。
我们以一个高频需求为例:让用户上传一份产品需求文档(PDF),模型自动提取核心功能点并生成测试用例。
整个流程分三步:
① 用户上传 PDF → ② LangChain 解析文本 → ③ Qwen3-0.6B 理解并生成。
镜像已预装pypdf和langchain-community,我们直接用。
4.2 实战:PDF 解析 + 测试用例生成
前提:在 Jupyter 中,先上传一个 PDF 文件(如
requirements.pdf)到 notebook 同级目录。
from langchain_community.document_loaders import PyPDFLoader from langchain_core.tools import tool from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain import hub # Step 1:定义一个工具:加载并提取 PDF 文本 @tool def load_pdf_content(filepath: str) -> str: """加载 PDF 文件并返回纯文本内容(最多前 2000 字)""" try: loader = PyPDFLoader(filepath) docs = loader.load() full_text = "\n".join([doc.page_content for doc in docs]) return full_text[:2000] + ("..." if len(full_text) > 2000 else "") except Exception as e: return f"加载失败:{str(e)}" # Step 2:准备 agent 提示模板(使用 LangChain Hub 上的成熟模板) prompt = hub.pull("hwchase17/openai-tools-agent") # Step 3:创建工具调用型 agent agent = create_tool_calling_agent( llm=chat_model, tools=[load_pdf_content], prompt=prompt, ) agent_executor = AgentExecutor(agent=agent, tools=[load_pdf_content], verbose=True) # Step 4:执行(模拟用户提问) result = agent_executor.invoke({ "input": "请读取 requirements.pdf,提取其中提到的3个核心功能,并为每个功能生成1条黑盒测试用例。" }) print("【Agent 输出】\n", result["output"])你将看到 agent 先调用load_pdf_content工具读取文件,再将提取的文本交给 Qwen3-0.6B 分析,最后结构化输出结果。
这个例子的价值在于:
- 工具调用逻辑由 LangChain 自动编排,你只需专注“做什么”,不用管“怎么调度”;
@tool装饰器让 Python 函数秒变 agent 可识别的工具,开发成本极低;- 即使 PDF 很长,
load_pdf_content返回的仍是可控文本片段,避免模型超长上下文崩溃。
5. 综合实战:搭建一个“会议纪要助手”
现在,我们把前面所有能力串起来,做一个真实可用的小应用:
用户输入一段语音转文字的会议记录(纯文本),助手自动完成三件事:
① 提炼 3 个关键决策项;
② 列出 5 条待办事项(含负责人建议);
③ 生成一封发给全员的简明纪要邮件。
5.1 构建结构化输出 Schema
为保证输出稳定、便于程序解析,我们用 LangChain 的PydanticOutputParser强制模型按 JSON Schema 回复:
from langchain.output_parsers import PydanticOutputParser from pydantic import BaseModel, Field from typing import List class MeetingSummary(BaseModel): key_decisions: List[str] = Field(description="3个关键决策项,每项不超过20字") action_items: List[str] = Field(description="5条待办事项,格式:'【负责人】任务描述'") email_draft: str = Field(description="一封面向全体参会者的简明纪要邮件正文,300字以内") parser = PydanticOutputParser(pydantic_object=MeetingSummary)5.2 编排完整处理链
from langchain.prompts import PromptTemplate # 定义结构化 prompt template = """你是一位专业的会议纪要助理。请严格按以下要求处理输入文本: 1. 提炼出 3 个最关键的决策项(聚焦“决定做什么”,非讨论过程); 2. 拆解出 5 条明确的待办事项,每条必须包含建议负责人(如“张三”、“技术组”); 3. 撰写一封发给全体参会者的纪要邮件,要求:标题明确、正文简洁、重点前置、不含技术细节。 输入文本: {input} 请严格按 JSON 格式输出,字段名必须为:key_decisions, action_items, email_draft。 {format_instructions} """ prompt = PromptTemplate( template=template, input_variables=["input"], partial_variables={"format_instructions": parser.get_format_instructions()} ) # 构建链 chain = prompt | chat_model | parser # 模拟一段会议记录(实际中可来自语音识别 API) sample_meeting = """【2025-04-28 产品周会】 主持人:李经理 - 讨论了新用户注册流程优化方案。王工提出取消邮箱验证步骤,经投票通过。 - 确认首页 Banner 图下周上线,设计稿已确认,由运营组负责投放。 - 技术组反馈支付接口稳定性问题,需在5月10日前完成灰度发布。 - 下周一起组织用户访谈,市场部牵头预约10位种子用户。 - QA 提议增加注册成功率埋点,开发组评估后同意接入。""" # 执行 try: result = chain.invoke({"input": sample_meeting}) print("=== 会议纪要结构化结果 ===") print("【关键决策】") for i, d in enumerate(result.key_decisions, 1): print(f"{i}. {d}") print("\n【待办事项】") for i, a in enumerate(result.action_items, 1): print(f"{i}. {a}") print("\n【邮件正文】") print(result.email_draft) except Exception as e: print("解析失败:", str(e))你会得到一份格式干净、字段明确、可直接存入数据库或发邮件的结构化结果。
这不再是“模型随便说说”,而是可集成、可验证、可交付的工程产出。
6. 总结:你已经掌握的实战能力
6.1 一条清晰的能力成长路径
回顾全程,你已亲手实践了 LangChain 与 Qwen3-0.6B 协同的四个关键层级:
| 层级 | 你做到的事 | 对应代码/组件 |
|---|---|---|
| L1:连通 | 在 Jupyter 中调通模型 API,验证基础响应 | ChatOpenAI+base_url |
| L2:记忆 | 让模型记住多轮对话,实现上下文连续性 | ConversationBufferMemory+ConversationChain |
| L3:扩展 | 接入 PDF 解析等外部能力,突破模型边界 | @tool+AgentExecutor |
| L4:交付 | 输出结构化 JSON,支撑下游系统集成 | PydanticOutputParser+PromptTemplate |
这不是“学完就忘”的教程,而是每一步都可复用、可迁移、可叠加的工程能力。
6.2 下一步行动建议
- 立刻尝试:把你手头一个重复性文案任务(如日报生成、周报汇总、客服话术润色)套用
ConversationChain改造; - 小步扩展:选一个常用文件类型(Excel / Markdown / Word),用对应 loader 写一个新
@tool,替换掉上面的 PDF 示例; - 进阶探索:在
extra_body中尝试"enable_thinking": False对比效果,体会思维链对复杂推理的真实价值; - 部署延伸:将本 notebook 中的
chain保存为.pkl,用 FastAPI 封装成 HTTP 接口,供前端调用。
Qwen3-0.6B 的轻量与 LangChain 的灵活,共同降低了 AI 应用落地的门槛。你不需要成为大模型专家,也能做出真正有用的东西。
真正的 AI 工程,就从这一行chat_model.invoke(...)开始。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。