LangChain+Qwen3-1.7B,打造专属AI助手
1. 为什么你需要一个“专属”AI助手?
你有没有过这样的体验:
打开某个大模型对话界面,输入问题,等几秒,得到一段看似专业、实则泛泛而谈的回答?
它知道很多,但好像又不太懂你——不懂你的工作节奏、不熟悉你常写的报告格式、记不住你偏好的表达风格,更不会主动提醒你:“上次你让我整理的会议纪要,今天有新进展了。”
这不是模型不够强,而是它缺少“专属感”。
Qwen3-1.7B是阿里巴巴在2025年4月开源的新一代千问模型,参数量17亿,支持32K长上下文,推理响应快、中文理解扎实。但它默认是个“通用型选手”。真正让它变成你办公桌边那个“懂你”的助手,关键不在模型本身,而在于你怎么用它。
LangChain,就是那把“定制化钥匙”。它不训练模型,不改权重,却能让你用几行代码,把Qwen3-1.7B从一个“问答机器”,变成一个会调用内部知识库、能读你上传的PDF、会按你公司模板写周报、甚至能记住你上周提过的需求的真·专属AI助手。
本文不讲微调、不跑训练、不配GPU集群。我们只做一件事:在Jupyter里,用LangChain把Qwen3-1.7B快速搭建成你能立刻用起来的智能工作伙伴。全程可复制、零编译、无需本地部署模型文件。
2. 环境准备:三步启动,镜像已就位
你不需要下载模型、配置CUDA、折腾transformers版本。CSDN星图镜像广场已为你准备好开箱即用的环境——所有依赖、Jupyter服务、Qwen3-1.7B推理API,全部预装完毕。
2.1 启动镜像并进入Jupyter
- 在CSDN星图镜像广场中找到
Qwen3-1.7B镜像,点击“一键启动” - 等待状态变为“运行中”,点击“打开Jupyter”
- 自动跳转至Jupyter Lab界面(地址形如
https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net)
小贴士:你看到的这个网址,就是后续代码中
base_url的真实值。端口固定为8000,无需修改。
2.2 验证基础连接
在第一个Jupyter单元格中运行以下代码,确认API服务已就绪:
import requests # 替换为你的实际Jupyter地址(去掉末尾的 /lab) base_url = "https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1" try: response = requests.get(f"{base_url}/models", headers={"Authorization": "Bearer EMPTY"}) models = response.json() print(" 成功连接推理服务") print(f"可用模型:{[m['id'] for m in models.get('data', [])]}") except Exception as e: print("❌ 连接失败,请检查镜像是否运行、URL是否正确") print(e)如果输出包含"Qwen3-1.7B",说明环境已准备就绪。接下来,我们正式接入LangChain。
3. LangChain接入:一行代码调用,开启智能增强
LangChain的核心价值,不是替代模型,而是组织模型的能力。它把“调用大模型”这件事,封装成和调用Python函数一样自然的操作,同时预留了扩展接口——你可以随时加入文档检索、工具调用、记忆管理等功能。
3.1 安装必要依赖(仅首次需要)
# 在Jupyter中执行(如已安装可跳过) !pip install langchain langchain-openai python-dotenv3.2 创建ChatModel实例:Qwen3-1.7B的LangChain入口
这是最关键的一步。我们不再直接发HTTP请求,而是用LangChain标准接口封装Qwen3-1.7B:
from langchain_openai import ChatOpenAI import os # 注意:此处使用的是 langchain_openai,不是 langchain_community # 因为Qwen3-1.7B镜像兼容OpenAI API协议,无需额外适配器 chat_model = ChatOpenAI( model="Qwen3-1.7B", # 模型名称,必须与镜像一致 temperature=0.5, # 控制输出随机性:0=确定性,1=高创意 base_url="https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1", # 你的Jupyter地址 + /v1 api_key="EMPTY", # 镜像默认认证方式,固定写法 extra_body={ "enable_thinking": True, # 启用思维链(Chain-of-Thought) "return_reasoning": True, # 返回推理过程(便于调试和解释) }, streaming=True, # 启用流式响应,文字逐字输出,体验更自然 ) # 测试基础调用 response = chat_model.invoke("你是谁?请用一句话介绍自己,并说明你最擅长帮人做什么。") print(response.content)输出示例(实际内容以Qwen3-1.7B为准):
“我是通义千问Qwen3-1.7B,阿里巴巴研发的新一代大语言模型。我最擅长帮你快速梳理信息、生成结构化文本(如邮件、报告、文案),并能准确理解复杂中文语义。”
这段代码完成了三件事:
- 建立了与Qwen3-1.7B的稳定通信通道
- 启用了思维链能力,让回答更有逻辑、可追溯
- 开启了流式输出,为后续构建交互式助手打下基础
它就是你专属AI助手的“心脏”。
4. 功能增强:从单次问答到持续协作助手
光能回答问题还不够。真正的“专属”,体现在它能记住上下文、理解你的任务、调用你的数据。LangChain提供了清晰的模块化路径,我们分三步升级:
4.1 让助手“记得住”:添加对话历史记忆
默认情况下,每次调用都是独立的。要实现多轮自然对话,需引入ConversationBufferMemory:
from langchain.memory import ConversationBufferMemory from langchain.chains import LLMChain from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder # 定义提示词模板:明确角色+强调记忆 prompt = ChatPromptTemplate.from_messages([ ("system", "你是一位高效、专业的办公助手。请根据用户提供的上下文,提供简洁、准确、可执行的建议。"), MessagesPlaceholder(variable_name="history"), # 对话历史占位符 ("human", "{input}"), ]) # 创建带记忆的链 memory = ConversationBufferMemory(return_messages=True) chain = LLMChain( llm=chat_model, prompt=prompt, memory=memory, ) # 开始多轮对话 print(chain.invoke({"input": "帮我写一封向客户说明项目延期的邮件,语气诚恳专业"})["text"]) print(chain.invoke({"input": "把第三段改成更积极的表述,强调我们已提前完成测试环节"})["text"]) print(chain.invoke({"input": "再加一句关于补偿方案的说明"})["text"])效果:助手能准确识别“第三段”“加一句”等指代,无需重复上下文。这就是“专属感”的第一步——它开始理解你的语言习惯。
4.2 让助手“看得见”:接入你的私有知识库
你电脑里的产品文档、公司制度PDF、过往项目总结……这些才是你最需要AI理解的内容。LangChain配合向量数据库,几行代码就能实现:
from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma from langchain_openai import OpenAIEmbeddings from langchain.chains import create_retrieval_chain from langchain.chains.combine_documents import create_stuff_documents_chain # 【模拟】加载一份本地PDF(实际使用时替换为你的文件路径) # loader = PyPDFLoader("your_company_policy.pdf") # docs = loader.load() # 为演示,我们用一段文本模拟知识片段 docs = [ "《XX公司远程办公规范》第3.2条:员工每日需在钉钉提交工作日报,包含今日计划、昨日完成、阻塞问题三项。", "《XX项目交付SOP》第5.1条:客户验收前必须完成三次内部压力测试,并出具《性能达标报告》。", ] # 文本切分 + 向量化 + 存入向量库(Chroma在内存中运行,无需额外服务) text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) splits = text_splitter.split_documents(docs) vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings()) # 创建检索增强链(RAG) retriever = vectorstore.as_retriever() prompt = ChatPromptTemplate.from_messages([ ("system", "你是一名熟悉公司内部制度的助理。请严格依据提供的制度文档回答问题,不编造、不推测。"), ("human", "{input}"), ]) document_chain = create_stuff_documents_chain(chat_model, prompt) retrieval_chain = create_retrieval_chain(retriever, document_chain) # 提问,助手将自动检索相关制度作答 result = retrieval_chain.invoke({"input": "员工每天要提交什么报告?依据哪条规范?"}) print(result["answer"])效果:助手不再凭“常识”回答,而是精准引用你提供的制度原文。它真正成了你知识体系的延伸。
4.3 让助手“做得多”:集成实用工具
一个好助手,不该只“说”,还要能“做”。LangChain的Tool机制,让你轻松赋予它调用外部能力:
from langchain.tools import Tool from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate # 定义一个简单工具:获取当前时间(可替换为查数据库、调API等) def get_current_time(_): from datetime import datetime return datetime.now().strftime("%Y年%m月%d日 %H:%M") time_tool = Tool( name="get_current_time", func=get_current_time, description="获取当前日期和时间,用于生成带时间戳的文档" ) # 创建智能体(Agent),它能自主决定是否调用工具 prompt = ChatPromptTemplate.from_messages([ ("system", "你是一个全能办公助手。当需要实时信息(如时间、天气、股价)时,请调用对应工具。"), ("placeholder", "{chat_history}"), ("human", "{input}"), ("placeholder", "{agent_scratchpad}"), ]) agent = create_tool_calling_agent(chat_model, [time_tool], prompt) agent_executor = AgentExecutor(agent=agent, tools=[time_tool], verbose=True) # 使用:助手会自动调用工具并整合结果 agent_executor.invoke({ "input": "请帮我起草一份今日会议纪要,开头注明当前时间。" })效果:助手主动调用时间工具,生成的纪要自动带上准确时间戳。未来,你可以轻松接入邮件发送、日程创建、代码生成等任意工具。
5. 实战案例:10分钟搭建“周报生成助手”
现在,我们把前面所有能力串起来,做一个真正解决痛点的小应用:自动生成结构化周报。
5.1 需求分析
- 输入:本周完成事项、下周计划、遇到的问题(可粘贴文字或上传txt)
- 输出:符合公司模板的Markdown周报,含时间戳、重点加粗、问题标红
- 增强:自动关联知识库中的“周报格式规范”
5.2 完整可运行代码
from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain.chains import create_tagging_chain # 1. 定义公司周报规范(存入知识库,此处简化为字符串) company_template = """ 【周报模板】 - 标题:《XXX团队周报 - YYYY年MM月DD日》 - 第一部分:本周完成(加粗关键成果) - 第二部分:下周计划(用符号标记优先级) - 第三部分:问题与阻塞(用🔴符号标记,并说明影响范围) - 落款:汇报人 + 日期 """ # 2. 构建专用提示词 prompt = ChatPromptTemplate.from_messages([ ("system", f"你是一名资深项目经理助理。请严格按以下规范生成周报:\n{company_template}\n\n要求:\n- 输出纯Markdown,不加任何解释\n- 关键成果用**加粗**\n- 问题用🔴开头\n- 时间用get_current_time工具获取"), ("human", "本周完成:1. 完成用户登录模块开发;2. 修复支付超时BUG。下周计划:1. 启动订单中心重构;2. 编写接口文档。问题:测试环境数据库容量不足,影响全量回归测试。"), ]) # 3. 创建链(无需记忆/检索,专注生成) chain = prompt | chat_model | StrOutputParser() # 4. 执行生成 weekly_report = chain.invoke({}) print(weekly_report)输出效果(示例):
《XXX团队周报 - 2025年05月12日》 **本周完成** 1. 完成用户登录模块开发 2. 修复支付超时BUG **下周计划** 1. 启动订单中心重构 2. 编写接口文档 **问题与阻塞** 🔴 测试环境数据库容量不足,影响全量回归测试 汇报人:AI助手 2025年05月12日这个例子展示了如何将LangChain的灵活性落地:
- 提示词即规范(避免口头传达误差)
- 输出即所见(Markdown直出,可粘贴进飞书/钉钉)
- 模板即资产(公司规范可沉淀为可复用的prompt变量)
你只需替换human部分的输入内容,就能批量生成数十份周报。
6. 进阶提示:让Qwen3-1.7B发挥更大价值
Qwen3-1.7B虽是1.7B模型,但在LangChain框架下,通过合理设计,它能胜任远超参数量的复杂任务。以下是几个经过验证的实战技巧:
6.1 思维链(CoT)不是噱头,是调试利器
启用enable_thinking后,Qwen3-1.7B会在回答前先输出推理步骤。这对调试极其有用:
# 观察它的思考过程 response = chat_model.invoke("小明有5个苹果,他吃了2个,又买了3个,现在有几个?请分步计算。") print(response.content) # 输出类似: # 思考:初始5个 → 吃掉2个剩3个 → 买3个变成6个 → 答案是6 # 答案:6当你发现结果错误时,直接看“思考”部分,就能快速定位是理解偏差、计算错误还是逻辑断裂。
6.2 温度(temperature)控制:不同场景,不同“性格”
| 场景 | 推荐temperature | 原因 |
|---|---|---|
| 写合同/邮件/报告 | 0.1–0.3 | 追求准确、稳定、无歧义 |
| 头脑风暴/创意文案 | 0.6–0.8 | 鼓励发散、突破常规 |
| 技术问答/代码生成 | 0.4–0.5 | 平衡准确性与一定灵活性 |
动态调整比固定值更有效。可在链中按需设置:
chat_model.bind(temperature=0.2).invoke("请生成一份保密协议条款")6.3 流式响应的正确用法:提升用户体验
不要只把它当“炫技”。流式输出结合前端,能做出媲美专业产品的体验:
# 在Jupyter中模拟流式显示效果 from IPython.display import display, clear_output import time def stream_response(query): response = chat_model.stream(query) # 注意:使用stream()方法 full_text = "" for chunk in response: if chunk.content: full_text += chunk.content clear_output(wait=True) display(full_text + "▌") # 加光标效果 time.sleep(0.03) # 模拟生成节奏 return full_text # stream_response("请用三句话介绍LangChain的核心价值")效果:文字逐字出现,用户感知响应“正在发生”,大幅降低等待焦虑。
7. 总结:你的专属AI助手,已经上线
回顾整个过程,我们没有:
- 编译任何C++代码
- 下载GB级模型文件
- 配置CUDA驱动或NCCL通信
- 修改一行transformers源码
我们只做了:
- 启动镜像→ 获取开箱即用的Qwen3-1.7B推理服务
- 接入LangChain→ 用标准接口封装模型,启用思维链与流式
- 叠加三层能力→ 记忆(多轮对话)、知识(私有文档)、工具(调用外部服务)
- 落地一个场景→ 10分钟做出可立即使用的周报生成器
这正是大模型应用的未来趋势:模型能力下沉为基础设施,应用创新聚焦于业务逻辑与用户体验。Qwen3-1.7B提供了扎实的底层能力,LangChain提供了灵活的组装框架,而你,才是那个定义“专属”价值的人。
下一步,你可以:
- 把公司所有SOP文档导入知识库,打造“制度问答机器人”
- 接入企业微信API,让助手自动推送日报提醒
- 用
create_react_agent构建能自主规划、调用多个工具的智能体
真正的AI助手,不在于它多“大”,而在于它多“懂你”。现在,它已经站在你的Jupyter里,等你给它第一个任务。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。