AI翻译LangChain实现的一点思考

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

python 复制代码
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来翻译作为中间结果后给出用户英语版本的答复。

但代码运行日志如下

bash 复制代码
{'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. 之后大模型用英语做了回复。

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

本文由博客一文多发平台 OpenWrite 发布!

相关推荐
Hello world.Joey5 小时前
Transformer解读
人工智能·深度学习·神经网络·自然语言处理·nlp·aigc·transformer
belldeep13 小时前
python:spaCy 工业级 NLP 库
python·自然语言处理·nlp·spacy
程序员lm1 天前
从0-1体验本地部署小模型
python·nlp
小马过河R4 天前
小白沉浸式本地Mac小龙虾OpenClaw部署安装教程
人工智能·macos·大模型·nlp·agent·openclaw·龙虾
华农DrLai4 天前
什么是Prompt注入攻击?为什么恶意输入能操控AI行为?
人工智能·深度学习·大模型·nlp·prompt
华农DrLai5 天前
什么是Prompt模板?为什么标准化的格式能提高稳定性?
数据库·人工智能·gpt·nlp·prompt
华农DrLai5 天前
什么是自动Prompt优化?为什么需要算法来寻找最佳提示词?
人工智能·算法·llm·nlp·prompt·llama
华农DrLai5 天前
什么是Prompt工程?为什么提示词的质量决定AI输出的好坏?
数据库·人工智能·gpt·大模型·nlp·prompt
热爱生活的猴子5 天前
RoBERTa 分类模型正则化调优实验——即dropout和冻结层对过拟合的影响
人工智能·深度学习·分类·数据挖掘·nlp
数据智能老司机6 天前
精通 Hugging Face 自然语言处理——深度 Q 网络与 Atari 游戏
nlp