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

AI翻译LangChain实现的一点有趣思考

在B站学习 图灵程序员-诸葛 的LangChain入门课程《深度定制本地工具》。在实践Chain.as_tool代码的时候,程序的运行逻辑让我困惑了好一会儿,写文章记录一下这个有趣的点。下面是代码,主要示意了如何构建自己的chain作为tool来用英语回答的问题。

from langchain_core.output_parsers import StrOutputParser  
from langchain_core.prompts import ChatPromptTemplate  
from langchain_openai import ChatOpenAI  llm = ChatOpenAI(  model="qwen-plus",  base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  api_key="[Your API KEY]"  
)  prompt = ChatPromptTemplate.from_messages(["human", "把{sentence}翻译成{language}"])  
parser = StrOutputParser()  chain = prompt | llm | parser  
as_tool = chain.as_tool(name="translatetool", description="翻译工具")  all_tools = {"translatetool": as_tool}  
print(as_tool.args)  
llm_with_tools = llm.bind_tools([as_tool])  query = "如何用英语回复这句话“今天天气真冷”?要求使用更随意的表达方式。"  
messages = [query]  ai_msg = llm_with_tools.invoke(messages)  
print(f"Message from LLM: {ai_msg}")  
messages.append(ai_msg)  if ai_msg.tool_calls:  for tool_call in ai_msg.tool_calls:  selected_tool = all_tools[tool_call["name"].lower()]  tool_msg = selected_tool.invoke(tool_call)  print(f"Message from tool: {tool_msg}")  messages.append(tool_msg)  result = llm_with_tools.invoke(messages).content  
print(result)

代码运行的结果确实是期待的,实际效果是

  • 用户向AI提出问题:如何用英语回复这句话“今天天气真冷”?要求使用更随意的表达方式。
  • AI回答:你可以用英语这样随意地表达“今天天气真冷”: “It’s freezing today!” 或者 “Man, it’s cold out here today!” 这些表达方式更口语化和随意。

我脑海中的程序执行逻辑是

  1. 根据用户提问,大模型给出答复,比如”确实,都冻僵了“或”是啊,今天真是太冷了“。这里的答复是中间结果。
  2. 然后大模型调用代码里的chain来翻译作为中间结果后给出用户英语版本的答复。

但代码运行日志如下

{'language': {'title': 'Language', 'type': 'string'}, 'sentence': {'title': 'Sentence', 'type': 'string'}}
Message from LLM: content='' additional_kwargs={'tool_calls': [{'id': 'call_abe466af849040adb44d48', 'function': {'arguments': '{"language": "en", "sentence": "今天天气真冷"}', 'name': 'translatetool'}, 'type': 'function', 'index': 0}], 'refusal': None} response_metadata={'token_usage': {'completion_tokens': 28, 'prompt_tokens': 196, 'total_tokens': 224, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}}, 'model_name': 'qwen-plus', 'system_fingerprint': None, 'id': 'chatcmpl-9bd057b0-705b-9ed5-86e0-171993e7a1e7', 'finish_reason': 'tool_calls', 'logprobs': None} id='run-e516fb4e-3844-49ce-bf9e-37ad3710fe49-0' tool_calls=[{'name': 'translatetool', 'args': {'language': 'en', 'sentence': '今天天气真冷'}, 'id': 'call_abe466af849040adb44d48', 'type': 'tool_call'}] usage_metadata={'input_tokens': 196, 'output_tokens': 28, 'total_tokens': 224, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}}
Message from tool: content="It's really cold today." name='translatetool' tool_call_id='call_abe466af849040adb44d48'
你可以用英语这样随意地表达“今天天气真冷”: "It's freezing today!" 或者 "Man, it's cold out here today!" 这些表达方式更口语化和随意。

从日志看出来,实际程序的执行逻辑是

  1. 大模型先调用代码里的chain把“今天天气真冷”翻译成了“It’s really cold today.”。
  2. 之后大模型用英语做了回复。

看出来程序实际执行的逻辑和我设想的完全不同。大模型的逻辑是先把用户的提问翻译为英语,然后在英语的思维里作答,细想确实更加合理。如果先用中文思路作答,从大模型得到类似“你妈喊你穿秋裤了吗?”的答复,再翻译成英语就有点哭笑不得了。

http://www.xdnf.cn/news/2656.html

相关文章:

  • 深入浅出提示词工程(结合 DeepSeek)
  • yolo-world踩坑指南
  • 服务器数据备份,服务器怎么备份数据呢?
  • 【Google Colab】利用unsloth针对医疗数据集进行大语言模型的快速微调(含跑通原代码)
  • 实现一个瀑布流布局
  • 文章记单词 | 第48篇(六级)
  • 【计算机组成原理实验】实验一 运算部件实验_加法器及计算机性能指标
  • 每日算法-250427
  • java异常
  • C++中的继承
  • 前端面试高频算法
  • 从增量式到绝对式 —— 深度理解编码器的原理与选型
  • 香港GPU显卡服务器与GPU云服务器的区别
  • linux blueZ 第六篇:嵌入式与工业级应用案例——在 Raspberry Pi、Yocto 与 Buildroot 上裁剪 BlueZ 并落地实战
  • 【遥感科普】不同波段的卫星影像分别有什么实际应用场景?
  • C语言内敛函数
  • Linux 进程替换
  • 深度解析 `FOR UPDATE`:数据库行锁的精准掌控之道
  • G1(Garbage-First)垃圾回收器与JVM内存
  • http://noi.openjudge.cn/_2.5基本算法之搜索_2152:Pots
  • C++ 数组长度sizeof(a)/sizeof(a[0])(易错)
  • 《代码整洁之道》第6章 对象和数据结构 - 笔记
  • 【第三十三周】BLIP论文阅读笔记
  • 如何将数据输入到神经网络中
  • I2S音频模块结构设计
  • 【GESP】C++三级练习 luogu-B2114 配对碱基链
  • flutter实践:比例对比线图实现
  • 第35课 常用快捷操作——用“鼠标左键”拖动图元
  • 集成方案 | Docusign + 甄零科技,赋能企业海外业务高效增长!
  • 第十三步:vue