当前位置: 首页 > news >正文

采用Langchain调用LLM完成简单翻译任务

采用 LangChain 调用 LLM 大语言模型

任务介绍

本项目是一个基于 LangChain 框架的大语言模型(LLM)调用示例,主要功能是:

  1. 多模型支持:统一接口调用多种大语言模型,包括 OpenAI 和主流国产模型
  2. 翻译服务:构建一个可配置的多语言翻译服务
  3. Web 服务部署:将 LangChain 链部署为 FastAPI Web 服务,提供 HTTP API 接口

任务细节

1. 支持的模型类型

项目支持以下 5 种大语言模型:

模型类型提供商模型示例API 端点
OpenAIOpenAIgpt-4-turbo, gpt-3.5-turboOpenAI 官方 API
通义千问 (Qwen)阿里云 DashScopeqwen-turbo, qwen-plus, qwen-maxDashScope 兼容接口
DeepSeek阿里云百炼deepseek-v3, deepseek-r1DashScope 兼容接口
月之暗面 (Moonshot)Moonshot AImoonshot-v1-8k, moonshot-v1-32kMoonshot API
百度文心一言百度千帆ernie-4.0-8k, ernie-3.5-8k百度千帆 API

2. 核心功能

  • 统一接口调用:所有模型通过 OpenAI 兼容接口调用,无需安装额外的集成包
  • 灵活配置:通过修改 MODEL_TYPE 变量即可切换不同模型
  • 代理支持:可选的代理配置,支持访问需要代理的模型服务
  • 追踪功能:可选的 LangSmith 追踪,用于监控和调试
  • 输出解析:使用 StrOutputParser 将模型输出解析为纯文本字符串
  • Web 服务:通过 FastAPI 和 LangServe 将链部署为 RESTful API

3. 技术栈

  • LangChain:大语言模型应用开发框架
  • FastAPI:现代 Python Web 框架
  • LangServe:LangChain 的服务部署工具
  • Uvicorn:ASGI 服务器

代码逻辑简略介绍

整体架构

环境配置 → 模型初始化 → 构建链 → 部署服务

代码流程

1. 环境配置阶段(第 28-53 行)
  • 代理配置(可选):

    • 通过 USE_PROXY 开关控制是否使用代理
    • 支持 HTTP/HTTPS 代理设置
    • 使用国产模型时通常不需要代理
  • LangSmith 追踪配置(可选):

    • 通过 ENABLE_LANGSMITH_TRACING 开关控制
    • 用于监控和调试 LangChain 调用链
    • 需要配置 LANGCHAIN_API_KEY
2. 模型初始化阶段(第 55-103 行)
  • 根据 MODEL_TYPE 变量选择不同的模型
  • 每种模型配置对应的 API Key 和 base_url
  • 使用 ChatOpenAI 类统一封装,通过 base_url 参数适配不同平台

关键代码逻辑

if MODEL_TYPE == 'qwen':model = ChatOpenAI(model='qwen-turbo',api_key=os.getenv('DASHSCOPE_API_KEY'),base_url='https://dashscope.aliyuncs.com/compatible-mode/v1')
3. 链构建阶段(第 159-165 行)
  • Prompt 模板:使用 ChatPromptTemplate 定义翻译任务的提示模板

    • System 消息:定义翻译任务和目标语言
    • User 消息:待翻译的文本内容
  • 输出解析器:使用 StrOutputParser 将模型返回的 AIMessage 对象解析为字符串

  • 链组合:使用管道操作符 | 组合各个组件

    prompt_template | model | parser
    

链的执行流程

  1. 输入字典 {'language': 'English', 'text': '...'}
  2. Prompt 模板填充变量,生成完整的消息列表
  3. 模型处理消息,返回 AIMessage 对象
  4. 解析器提取 AIMessage.content,返回纯文本字符串
4. 服务部署阶段(第 168-181 行)
  • FastAPI 应用:创建 FastAPI 应用实例
  • 路由注册:使用 add_routes 将链注册为 API 端点
    • 路径:/chainDemo
    • 自动生成 OpenAPI 文档
  • 服务启动:使用 Uvicorn 启动 Web 服务器
    • 地址:http://localhost:8000
    • 可通过 HTTP POST 请求调用翻译服务

使用示例

本地调用
result = chain.invoke({'language': 'English', 'text': '我下午还有一节课,不能去打球了。'
})
# 输出:I have another class this afternoon, so I can't go play ball.
API 调用
curl -X POST "http://localhost:8000/chainDemo/invoke" \-H "Content-Type: application/json" \-d '{"input": {"language": "English","text": "我下午还有一节课,不能去打球了。"}}'
软件调用

在这里插入图片描述

关键设计模式

  1. 统一接口模式:所有模型通过 ChatOpenAI 统一接口,通过 base_url 适配不同平台
  2. 链式组合模式:使用管道操作符组合 Prompt、Model、Parser
  3. 配置驱动模式:通过环境变量和配置变量控制行为
  4. 服务化模式:将链封装为 Web 服务,提供标准化 API

总结

本项目展示了如何使用 LangChain 框架:

  • 统一调用多种大语言模型
  • 构建可复用的翻译链
  • 将链部署为 Web 服务

代码结构清晰,配置灵活,易于扩展和维护,是学习 LangChain 框架的实用示例。

完整代码(含注释,可以解开注释,看输出结果)

"""
LangChain 调用 LLM 示例 - 支持 OpenAI 和国产模型支持的模型:
1. OpenAI: gpt-4-turbo, gpt-3.5-turbo 等
2. 通义千问(Qwen): qwen-turbo, qwen-plus, qwen-max 等
3. 智谱AI(GLM): glm-4-plus, glm-4, glm-3-turbo 等
4. DeepSeek: deepseek-v3, deepseek-r1
5. 月之暗面(Moonshot): moonshot-v1-8k, moonshot-v1-32k 等
6. 百度文心一言: ernie-4.0-8k, ernie-3.5-8k 等使用方法:
1. 修改 MODEL_TYPE 变量选择要使用的模型
2. 设置对应模型的 API Key
3. 运行脚本即可注意:所有国产模型都通过 OpenAI 兼容接口调用,无需安装额外的包
"""import os
from fastapi import FastAPI
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langserve import add_routes# ========== 模型配置:选择要使用的模型 ==========
# 选项:'openai', 'qwen', 'zhipu', 'deepseek', 'moonshot', 'baidu'
MODEL_TYPE = 'qwen'  # 修改这里来切换不同的模型# 根据选择的模型类型进行配置
if MODEL_TYPE == 'openai':# OpenAI 模型os.environ['OPENAI_API_KEY'] = 'your-openai-api-key'  # 请替换为您的 API Keymodel = ChatOpenAI(model='gpt-4-turbo')elif MODEL_TYPE == 'qwen':# 通义千问(阿里云 DashScope)os.environ['DASHSCOPE_API_KEY'] = '请输入自己的密钥'  # 请替换为您的 API Keymodel = ChatOpenAI(model='qwen-turbo',  # 可选:qwen-turbo, qwen-plus, qwen-max, qwen-max-longcontextapi_key=os.getenv('DASHSCOPE_API_KEY'),base_url='https://dashscope.aliyuncs.com/compatible-mode/v1')
elif MODEL_TYPE == 'deepseek':# DeepSeek(通过阿里云百炼)os.environ['DASHSCOPE_API_KEY'] = 'your-dashscope-api-key'  # 请替换为您的 API Keymodel = ChatOpenAI(model='deepseek-v3',  # 可选:deepseek-v3, deepseek-r1api_key=os.getenv('DASHSCOPE_API_KEY'),base_url='https://dashscope.aliyuncs.com/compatible-mode/v1')elif MODEL_TYPE == 'moonshot':# 月之暗面(Moonshot)os.environ['MOONSHOT_API_KEY'] = 'your-moonshot-api-key'  # 请替换为您的 API Keymodel = ChatOpenAI(model='moonshot-v1-8k',  # 可选:moonshot-v1-8k, moonshot-v1-32k, moonshot-v1-128kapi_key=os.getenv('MOONSHOT_API_KEY'),base_url='https://api.moonshot.cn/v1')elif MODEL_TYPE == 'baidu':# 百度文心一言(千帆)os.environ['BAIDU_API_KEY'] = 'your-baidu-api-key'  # 请替换为您的 API Keymodel = ChatOpenAI(model='ernie-4.0-8k',  # 可选:ernie-4.0-8k, ernie-3.5-8k, ernie-turbo-8kapi_key=os.getenv('BAIDU_API_KEY'),base_url='https://qianfan.baidubce.com/v2')else:raise ValueError(f"不支持的模型类型: {MODEL_TYPE}")# 准备prompt
#msg = [
#	SystemMessage(content = '请将以下的内容翻译成意大利语'),
#	HumanMessage(content = '你好,请问你要去哪里?')
#]# 普通正常输出
# result = model.invoke(msg)
# print(result)
# 结果展示 
# content='Ciao, dove vai?' 
# additional_kwargs={'refusal': None} 
# response_metadata={# 'token_usage': # {# 'completion_tokens': 6, # 'prompt_tokens': 31, # 'total_tokens': 37, # 'completion_tokens_details': None, # 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}}, # 'model_name': 'qwen-turbo', # 'system_fingerprint': None, # 'id': 'chatcmpl-c3692cee-4922-41be-99fa-d65420870fc2', # 'service_tier': None, # 'finish_reason': 'stop', # 'logprobs': None# } # id='lc_run--0bdba41e-113a-4f02-9869-55015309b4bb-0' # usage_metadata={# 'input_tokens': 31, # 'output_tokens': 6, # 'total_tokens': 37, # 'input_token_details': # {# 'cache_read': 0# }, # 'output_token_details': {}# }  # 简单的解析响应数据
# 创建返回的数据解析器
parser = StrOutputParser()
# print(parser.invoke(result))
# 直接解析输出:Ciao, dove vai?# print(chain.invoke(msg))
# Ciao, dove vai?# 定义模板
prompt_template = ChatPromptTemplate.from_messages([('system', '请将下面的内容翻译成{language}'),('user', "{text}")
])
# 得到链
chain = prompt_template | model | parser
# print(chain.invoke({'language': 'English', 'text': '我下午还有一节课,不能去打球了。'}))# 把我们的程序部署成服务
# 创建fastAPI的应用app = FastAPI(title = '我的Langchain服务', version='V1.0', description='使用Langchain翻译任何语句的服务器')add_routes(app,chain,path = "/chainDemo"
)if __name__ == "__main__":import uvicornuvicorn.run(app, host="localhost", port=8000)
http://www.dtcms.com/a/614190.html

相关文章:

  • 游戏网站建设流程图注册一个电商公司需要多少钱
  • 深度拥抱变革:AI 重塑临床工作流与医院信息化的战略蓝图与实施路线
  • 北京网站制作公司招聘淘宝客网站备案
  • 服务器开荒:安装宝塔面板
  • 基于AWS的应用程序可靠性提升架构优化方案——RDS多可用区与EC2弹性架构实践
  • 数据库事务ACID特性详解
  • 基于单片机的自行车速度与里程检测报警系统设计
  • 网站运营计划书建筑费用明细表模板
  • GPT-5.1发布!你的AI更暖更智能!
  • 万悉科技GEO专题分享会——共探AI时代中国出海企业的流量新机遇
  • 商业网站的相关内容青岛网站设计网站
  • Python判断字符串中是否有中文
  • 前端动画技术发展方向
  • 图片网站该如何做seo优化万户网络做网站怎么样
  • qt显示类控件---QLCDNumber
  • C#1115变量
  • 钓鱼网站排名假冒建设银行最多wordpress停止更新
  • 思维链(CoT)的本质:无需架构调整,仅靠提示工程激活大模型推理能力
  • 【CUDO云服务器】基本配置
  • 光明新区做网站网站的风格保持一致
  • 信创时代下,PHP/MySQL应用的平滑迁移与运维管理升级(AI整理)
  • 网站开发费用投入情况网页设计需要学什么书
  • JDBC 入门详解(附工具类与防 SQL 注入)
  • 公司网站改版设计汽车之家这样的网站怎么做
  • 【网络编程】TCP/IP网络概述
  • 网页和站点的区别上海网站高端
  • 【C++开发面经】全过程面试问题详解
  • 【前端学习】前端高频面试场景题
  • 解决在虚拟机的ensp中启动路由器,卡0%且出现虚拟机卡死的方法
  • 网站开发项目策划书手机前端开发软件工具