简单几步:在Jupyter中调用Qwen3-1.7B并集成LangChain工作流
简单几步:在Jupyter中调用Qwen3-1.7B并集成LangChain工作流
1. 引言
如果你正在寻找一个既轻量又聪明的大模型,能快速集成到你的自动化流程里,那么Qwen3-1.7B很可能就是你的菜。它来自阿里巴巴的通义千问家族,虽然个头不大,但理解能力和生成效果都相当不错。
但光有一个好模型还不够,怎么把它用起来才是关键。直接写代码调用?每次都要处理网络请求、解析结果,太麻烦了。这时候,LangChain就派上用场了。它就像一个大模型的“万能插座”,让你能用统一的方式调用各种模型,还能轻松地把多个步骤串起来,做成自动化的工作流。
今天这篇文章,我就带你走一遍完整的流程:从启动环境,到调用模型,再到用LangChain搭建一个能实际干活的小系统。整个过程很简单,跟着做就行。
2. 准备工作:启动环境与理解核心工具
2.1 快速启动你的AI开发环境
最省事的方法,就是使用已经配置好的环境。这里我们以CSDN星图平台提供的预置镜像为例,几步就能搞定:
- 访问平台,搜索包含“Qwen3”关键词的镜像。
- 找到合适的镜像(比如
qwen3-inference),点击创建实例。 - 等待实例启动完成,然后打开提供的Jupyter Notebook链接。
就这么简单,一个包含了Qwen3模型服务和常用Python库(包括LangChain)的环境就准备好了。你不需要自己安装模型、配置环境,省去了大量繁琐的步骤。
2.2 认识我们的两位主角:Qwen3-1.7B与LangChain
在动手之前,我们先花一分钟了解一下要用的工具。
Qwen3-1.7B是什么?你可以把它想象成一个专门处理文字的小型智能引擎。它最大的特点就是“小而精”:
- 体积小:参数只有17亿,相比动辄几百亿的大模型,它对电脑资源的要求低得多,启动和运行都快。
- 能力强:在代码生成、逻辑推理、多轮对话这些任务上,表现远超同尺寸的模型,完全能满足很多自动化场景的需求。
- 好接入:它提供了一个和OpenAI模型兼容的接口。这意味着,所有能调用ChatGPT的工具,理论上都能直接用来调用它,兼容性非常好。
LangChain能帮我们做什么?LangChain是一个专门用来构建大模型应用的框架。它主要解决了两个痛点:
- 统一接口:不管背后是Qwen、GPT还是其他什么模型,你都可以用几乎相同的代码去调用,不用为每个模型写一套逻辑。
- 组装流程:它提供了“链”(Chain)这个概念,让你能把“提问 -> 处理回答 -> 再提问 -> 输出结果”这一系列步骤,像搭积木一样组合起来,快速构建复杂的应用。
我们的目标,就是把Qwen3-1.7B这个“智能引擎”,通过LangChain这个“万能适配器和组装线”,集成到我们自己的Jupyter工作流里。
3. 第一步:在Jupyter中成功调用Qwen3-1.7B
万事开头难,但调用Qwen3-1.7B的开头特别简单。因为它的接口和OpenAI模型是兼容的,我们可以直接用LangChain里现成的ChatOpenAI这个类来调用它。
打开你的Jupyter Notebook,新建一个代码单元格,把下面的代码贴进去运行。
from langchain_openai import ChatOpenAI # 初始化模型客户端 chat_model = ChatOpenAI( model="Qwen3-1.7B", # 指定使用Qwen3-1.7B模型 temperature=0.5, # 控制回答的随机性,0.1更确定,1.0更有创意 base_url="http://localhost:8000/v1", # 重点:这是模型服务的地址,需要根据你的环境修改 api_key="EMPTY", # 本地服务通常不需要密钥,填"EMPTY"即可 streaming=True, # 启用流式输出,回答会一个字一个字显示,体验更好 ) # 发起一次简单的对话 response = chat_model.invoke("你是谁?") print(response.content)代码说明与注意事项:
这段代码的核心是创建了一个ChatOpenAI对象,但请注意base_url这个参数。它告诉程序去哪里找模型服务。
- 关键修改点:示例中的
base_url="http://localhost:8000/v1"是一个占位符。在实际的CSDN星图镜像环境中,这个地址通常是动态生成的,格式类似https://gpu-pod[一串ID]-8000.web.gpu.csdn.net/v1。 - 如何找到正确的地址:你需要在启动的Jupyter环境中,查看模型服务实际运行的地址和端口(通常是8000),然后替换掉上面的
base_url。 - 其他参数:
temperature:可以理解为“想象力”开关。写正式报告时调低(如0.2),让回答更稳定;需要创意时调高(如0.8)。streaming=True:开启后,模型生成回答时会像打字一样逐步显示,适合长时间任务。
运行成功后,你应该会看到模型返回的自我介绍,例如:“我是通义千问,由阿里巴巴开发的大语言模型...”。这说明你的模型调用通道已经打通了!
4. 第二步:用LangChain构建你的第一个自动化工作流
仅仅能问答还不够,我们要让它能按流程干活。假设你每天下班前都要写工作日报,这个过程很固定:总结进展、提出问题、计划明天。我们可以用LangChain把这个过程自动化。
下面我们来构建一个“智能日报生成器”。
4.1 定义任务与提示模板
首先,我们需要告诉模型我们要它做什么,以及做成什么样子。这通过“提示模板”来实现。
from langchain.prompts import PromptTemplate # 创建一个提示模板,告诉模型我们的具体要求和格式 report_prompt_template = """ 你是一个专业的职场助手,请根据我提供的今日工作流水账,整理成一份结构清晰、语言精炼的日报。 请严格按照以下三个部分组织内容,每个部分列出2-3条关键点: 【今日完成】 【遇到的问题】 【明日计划】 我的原始工作记录如下: {raw_input} """ # 将文本模板实例化 prompt = PromptTemplate.from_template(report_prompt_template)这个模板里,{raw_input}是一个占位符,后面我们会把具体的工作内容填进去。模板开头的指令非常关键,它明确了角色(职场助手)、任务(整理日报)和输出格式(三个部分),这能极大地提高模型输出结果的质量和稳定性。
4.2 组装工作流链条
接下来,我们用LangChain的LLMChain,把“提示模板”和“模型调用”这两个环节链接起来,形成一个完整的工作流。
from langchain.chains import LLMChain # 使用之前创建好的 chat_model 和 prompt daily_report_chain = LLMChain(llm=chat_model, prompt=prompt) # 准备原始的工作内容 my_work_log = """ 上午:修复了用户注册页面手机号验证码发送失败的bug。 下午:和产品经理讨论了新版搜索功能的需求,画了初步的原型图。 中间:服务器在下午3点左右出现了一次短暂卡顿,已重启恢复,原因待查。 明天:打算开始编写搜索功能的后端API接口。 另外:还需要找设计同事确认一下首页Banner的样式。 """ # 运行工作流,生成日报 result = daily_report_chain.invoke({"raw_input": my_work_log}) print("生成的日报:\n") print(result["text"])运行这段代码,你会得到一份整理好的日报,可能长这样:
【今日完成】 1. 修复了用户注册页面手机验证码发送失败的问题。 2. 与产品经理讨论了新版搜索功能需求,并完成了初步原型设计。 【遇到的问题】 1. 服务器在下午3点发生短暂卡顿,已通过重启临时解决,根本原因尚待排查。 【明日计划】 1. 开始编写新版搜索功能的后端API接口。 2. 与设计同事沟通,确认首页Banner的最终样式。看,原本杂乱的工作记录,被自动整理成了结构清晰的日报。LLMChain的作用就是接收输入(工作记录),套用模板,调用模型,最后输出结果。你可以把my_work_log换成任何文本,它都能按这个流程处理。
5. 第三步:让工作流更强大、更实用
基础功能有了,但我们还可以让它变得更聪明、更好用。这里介绍两个马上就能用上的进阶技巧。
5.1 增加记忆能力,实现多轮对话
默认情况下,模型每次回答都是独立的,它不记得之前说过什么。但在客服、辅导等场景,我们需要它能联系上下文。LangChain的“记忆”组件可以轻松实现这一点。
from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain # 创建一个记忆体,用来保存对话历史 memory = ConversationBufferMemory() # 创建一个带有记忆的对话链 conversation = ConversationChain(llm=chat_model, memory=memory) # 第一轮对话 print(conversation.invoke("我想学习Python,应该从哪里开始?")['response']) # 第二轮对话,模型会记得之前聊过Python print(conversation.invoke("那数据分析方面呢,有什么推荐的库吗?")['response'])ConversationBufferMemory会像记事本一样自动记录你和模型的整个对话过程。当你进行后续提问时,它会把这些历史信息一并送给模型,这样模型就能做出有连贯性的回答,体验更自然。
5.2 处理长内容与网络问题
流式输出,告别漫长等待当模型需要生成很长一段文字时,如果等它全部生成完再显示,用户会面对一个空白的屏幕干等。开启流式输出可以改善体验。
# 初始化时已设置 streaming=True # 调用时使用 .stream() 方法 for chunk in chat_model.stream("请为我写一篇关于人工智能未来发展的短文,约200字。"): print(chunk.content, end="", flush=True) # 逐字打印,实现“打字机”效果添加重试机制,让程序更健壮网络请求偶尔会失败。我们可以用一个简单的装饰器让程序在失败时自动重试几次,增加稳定性。
import time from tenacity import retry, stop_after_attempt, wait_exponential # 定义一个带重试的调用函数 @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, max=4)) def robust_model_call(chain, input_text): try: response = chain.invoke({"raw_input": input_text}) return response except Exception as e: print(f"请求出错: {e},正在重试...") raise e # 触发重试 # 使用这个函数来调用你的工作流 result = robust_model_call(daily_report_chain, my_work_log)这段代码会在调用失败后,等待一段时间(等待时间会指数级增长),然后最多重试3次。对于临时的网络波动非常有效。
6. 总结
我们来回顾一下今天完成的几件关键事情:
- 环境搭建:利用预置的镜像环境,我们跳过了复杂的模型部署和依赖安装,直接获得了一个包含Qwen3-1.7B和LangChain的Jupyter工作台。
- 模型调用:借助LangChain的
ChatOpenAI接口,我们只用几行代码就成功调用了Qwen3-1.7B模型。关键在于正确配置base_url指向模型服务地址。 - 工作流构建:通过
PromptTemplate定义任务指令,再用LLMChain将模板和模型组装起来,我们创建了一个可以自动生成工作日报的智能流程。这展示了如何将零散的模型调用升级为可重复使用的自动化任务。 - 功能增强:我们进一步为工作流添加了记忆功能(
ConversationBufferMemory),使其能进行连贯对话;并引入了流式输出和错误重试机制,提升了用户体验和程序鲁棒性。
这个过程的核心思路是“拼接”:LangChain提供了各种标准化的“积木块”(模型调用、提示模板、记忆模块、工具等),我们的工作就是根据业务逻辑,把这些积木块拼接成一个能自动运行的智能流程。
你现在已经拥有了一个起点。可以基于这个“日报生成器”框架,轻松改造出其他自动化工具,比如:
- 将提示模板改成客服话术,就是一个智能问答机器人。
- 结合网页抓取工具,就能做一个新闻摘要生成器。
- 接入数据库,可以开发智能报表分析助手。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
