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

(二)输入输出处理——打造智能对话的灵魂

上一篇:(一)从零开始:用 LangChain 和 ZhipuAI 搭建简单对话

在上一篇文章中,我们成功搭建了一个基于 LangChain 和 ZhipuAI 的智能对话系统的基础环境。今天,我们将深入探讨输入输出处理的细节,这是打造一个真正智能对话系统的关键环节。输入输出处理不仅仅是简单的数据传递,更是赋予对话系统灵魂的过程。通过精心设计的输入输出逻辑,我们可以让系统变得更加智能、灵活,甚至具有某种“人格魅力”。接下来,让我们一起揭开输入输出处理的神秘面纱。

(建议从第一篇食用)

一、模板化对话:让对话更有风格

对话系统的第一印象往往来自于它的风格。一个有趣、有个性的对话系统更容易吸引用户的注意。LangChain 提供了强大的模板化对话功能,让我们可以轻松定制对话风格。

相关包

from langchain_community.chat_models import ChatZhipuAI
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.prompts import FewShotChatMessagePromptTemplate
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain.output_parsers import CommaSeparatedListOutputParser

单轮对话模板:打造个性化评论家

想象一下,如果你的对话系统是一个“贴吧老哥”,它会用怎样的语气来评价 LangChain 呢?通过模板化对话,我们可以轻松实现这一点:

template = ChatPromptTemplate.from_messages([("system", "你是一位{style}风格的评论家"),("human", "请评价以下事物:{things}")
])
messages = template.format_messages(style="贴吧老哥", things="langchain")
response = chat.invoke(messages)

运行这段代码后,系统会以“贴吧老哥”的风格评价 LangChain。这种风格化的输出不仅增加了对话的趣味性,还让系统显得更加“人性化”。

运行结果如下:(模型不同运行结果也不同)

哈,老哥,来聊聊这个LangChain啊。这玩意儿在AI界可是挺火的,咱们就当个贴吧老哥,来聊聊这东西。首先,LangChain这名字听起来就挺高端大气,像是哪个科研机构或者大公司搞出来的。它本质上是一个构建大型语言模型的工具链,听起来就像是个AI界的瑞士军刀,能解决不少问题。优点嘛,老哥,首先它集成度挺高,把各种AI模型、数据处理、模型训练的功能都整合在一起,对于做语言模型开发的人来说,这简直就是福音,不用东拼西凑,一套工具链就能搞定很多事儿。其次,LangChain的扩展性也不错,可以方便地接入各种外部库和API,对于开发者来说,灵活性挺高,可以根据自己的需求来定制。但是,老哥,凡事都有两面性,LangChain也有它的槽点。首先,这玩意儿可能对新手不太友好。它那么强大,功能又多,不熟悉的人可能会觉得操作起来有点复杂,有点像是个大杂烩,需要一定的学习成本。再者,这么强大的工具链,资源消耗肯定不低。对于一些资源有限的小团队或者个人开发者来说,可能得掂量掂量自己的服务器配置能不能撑得住。最后,老哥,我得说说这东西的生态。虽然LangChain本身挺强大,但是周边的生态可能还不够完善,一些配套的工具和资源可能还需要时间去积累。总的来说,LangChain是个挺不错的工具,对于有需求的人来说,是个不错的选择。但是,老哥,用这东西之前,也得考虑清楚自己的需求、团队实力和资源情况,别到时候搞了个大新闻,自己却忙得焦头烂额。

多轮对话模板:管理对话历史的艺术

多轮对话是智能对话系统的核心功能之一。通过模板化对话,我们可以轻松管理对话历史,让对话更加连贯:

history_template = ChatPromptTemplate.from_messages([("system", "你正在与用户讨论{theme}。以下是之前的对话历史:\n{history}"),("human", "{input}")
])
messages = history_template.format_messages(theme="目前AI发展的趋势",history=[HumanMessage(content="国外的chatgpt怎么样"),AIMessage(content="还行,也就那样,我认为国内deepseek无敌")],input="详细说说他们的优势"
)
response = chat.invoke(messages)

这段代码不仅让对话历史得以保留,还通过模板化的方式让对话更加自然。这种技术在客服系统、教育辅导等领域有着广泛的应用前景。

运行结果如下:(模型不同运行结果也不同)

当然可以。ChatGPT 和 DeepSeek 都是人工智能领域的先进技术,它们各自有不同的优势。以下是对两者优势的详细说明:### ChatGPT 的优势:1. **强大的语言处理能力**:ChatGPT 是由 OpenAI 开发的,基于 GPT-3.5 模型,具有非常强大的自然语言处理能力,能够进行流畅的对话,理解复杂的语言结构和语境。2. **广泛的领域知识**:ChatGPT 接受了大量的文本数据训练,因此它对各种领域的知识都有所了解,能够回答各种问题。3. **跨平台应用**:ChatGPT 可以在多个平台上运行,包括网页、移动应用等,用户可以在不同的设备上与它互动。4. **社区支持**:由于 ChatGPT 是由 OpenAI 开发的,背后有一个强大的社区和团队支持,不断进行更新和改进。5. **商业应用潜力**:ChatGPT 在客户服务、内容创作、教育等多个商业领域都有广泛的应用潜力。### DeepSeek 的优势:1. **深度学习技术**:DeepSeek 利用深度学习技术,在图像识别、语音识别等领域表现出色,特别是在复杂场景下的图像理解能力。2. **国内研发**:DeepSeek 是中国自主研发的技术,体现了中国在人工智能领域的创新能力和技术实力。3. **特定领域的深度应用**:DeepSeek 在特定领域(如医疗、安防等)有深入的研究和应用,能够提供针对性强、专业化的解决方案。4. **高效的数据处理能力**:DeepSeek 在处理大量数据时表现出高效,能够快速从数据中提取有价值的信息。5. **安全性**:DeepSeek 在设计和应用过程中注重数据安全和隐私保护,符合国内外的数据保护法规。总的来说,ChatGPT 和 DeepSeek 在各自领域都有显著的优势。ChatGPT 强调的是通用性和跨领域的对话能力,而 DeepSeek 则在特定技术领域和安全性方面表现出色。两者都是人工智能技术发展的重要成果,代表了不同方向上的创新和突破。

二、Few-shot 提示:用示例引导模型

Few-shot 提示是一种通过提供少量示例来引导模型输出的技术。它在处理数学计算、逻辑推理等任务时表现尤为出色。

examples = [{"input": "5*6", "output": "30"},{"input": "4*6", "output": "24"}
]
example_template = ChatPromptTemplate.from_messages([("human", "{input}"),("ai", "{output}")
])
few_shot_prompt = FewShotChatMessagePromptTemplate(example_prompt=example_template,examples=examples
)
final_prompt = ChatPromptTemplate.from_messages([few_shot_prompt,("human", "{input}")
])
response = chat.invoke(final_prompt.format_messages(input="25*12"))
print(response.content)

通过 Few-shot 提示,我们可以让模型快速理解任务要求,并给出准确的输出。这种技术特别适合处理那些需要一定逻辑推理能力的任务。

运行结果如下

300

三、结构化输出解析:让模型输出更规范

在实际应用中,我们往往需要模型输出结构化的数据,比如列表或 JSON 格式。LangChain 提供了强大的输出解析功能,让模型的输出更加规范。

列表输出

parser = CommaSeparatedListOutputParser()
format_instructions = parser.get_format_instructions()
template = "列出3种{category}:\n{format_instructions}"
prompt = ChatPromptTemplate.from_template(template)
chain = prompt | chat | parser
result = chain.invoke({"category": "编程语言", "format_instructions": format_instructions})

通过列表解析器,我们可以让模型输出一个清晰的列表。这种输出方式在信息整理和提取场景中非常实用。

运行结果如下:(模型不同运行结果也不同)

['Python', 'JavaScript', 'Java']

JSON 输出

class Recipe(BaseModel):name: str = Field(description="菜谱名称")steps: list[str] = Field(description="制作步骤")parser = JsonOutputParser(pydantic_object=Recipe)
prompt = ChatPromptTemplate.from_template("生成{cuisine}菜谱,要求:{requirements}\n{format_instructions}"
)
chain = prompt | chat | parser
result = chain.invoke({"cuisine": "川菜","requirements": "辣度适中,包含牛肉","format_instructions": parser.get_format_instructions()
})

JSON 输出解析器可以将模型的输出转化为结构化的 JSON 数据。这种输出方式在需要复杂数据结构的场景中非常有用,比如菜谱生成、任务调度等。

运行结果如下

{'name': '辣味牛肉丝', 'steps': ['将牛肉切成细丝,用料酒、生抽、淀粉和少许盐腌制10分钟。', '将干辣椒剪成小段,蒜切成末,姜切成片。', '锅中放油,油热后放入干辣椒、蒜末和姜片爆香。', '加入腌制好的牛肉丝快速翻炒至变色。', '加入适量的生抽、老抽调色,再加入适量的料酒。', '加入青椒丝和红椒丝继续翻炒。', '最后加入适量的盐、糖、鸡精调味,炒匀后即可出锅。']}

四、工具调用:扩展模型的能力边界

工具调用是智能对话系统的一个重要功能。通过调用外部工具,我们可以扩展模型的能力边界,让它能够处理更多复杂的任务。

@tool
def get_weather(city: str) -> str:"""获取指定城市的天气信息"""return f"{city}:晴,25℃"prompt = ChatPromptTemplate.from_template("查询{city}天气")
chain = prompt | chat.bind_tools([get_weather])
response = chain.invoke({"city": "北京"})

在这段代码中,我们通过调用天气查询工具,让模型能够回答与天气相关的问题。这种工具调用的方式可以大大扩展模型的应用范围。

运行结果如下:(以下运行结果是工具的调用信息)

content='' additional_kwargs={'tool_calls': [{'function': {'arguments': '{"city": "北京"}', 'name': 'get_weather'}, 'id': 'call_-8828734222680606890', 'index': 0, 'type': 'function'}]} response_metadata={'token_usage': {'completion_tokens': 10, 'prompt_tokens': 147, 'total_tokens': 157}, 'model_name': 'glm-4-flash', 'finish_reason': 'tool_calls'} id='run-e2b810e0-c3bc-4ecf-8461-fcf705f04d53-0' tool_calls=[{'name': 'get_weather', 'args': {'city': '北京'}, 'id': 'call_-8828734222680606890', 'type': 'tool_call'}]

总结

输入输出处理是智能对话系统的核心环节,它不仅决定了对话的质量,还影响着用户的体验。通过模板化对话、Few-shot 提示、结构化输出解析和工具调用等技术,我们可以让对话系统变得更加智能、灵活和实用。

未来,我们可以进一步探索以下方向:

  • 更复杂的对话逻辑:结合 RAG 技术,让对话系统能够基于外部数据进行回答。
  • 多模态输入输出:支持图片、语音等多种输入输出形式,让对话系统更加多样化。
  • 情感分析与个性化推荐:通过情感分析技术,让对话系统能够根据用户的情绪提供个性化的建议。

祝我们学习愉快 😊

下一篇:(三)链式工作流构建——打造智能对话的强大引擎


http://www.mrgr.cn/news/97289.html

相关文章:

  • AI Agent开发大全第二十课-如何开发一个MCP(从0开发一个MCP Server)
  • 250405-VSCode编辑launch.json实现Debug调试Open-WebUI
  • Android学习总结之应用启动流程(从点击图标到界面显示)
  • STM32F103C8T6实现 SG90 180 °舵机任意角度转动
  • 【蓝桥杯】算法笔记3
  • JJJ:generic netlink例程分析
  • Flask+Vue构建图书管理系统及Echarts组件的使用
  • 第3课:状态管理与事件处理
  • 高级:分布式系统面试题精讲
  • 一、简单的 Django 服务
  • (一)从零开始:用 LangChain 和 ZhipuAI 搭建简单对话
  • 基于YOLO11实例分割与奥比中光相机的快递包裹抓取点检测
  • Python3 学习笔记
  • MySQL 基础入门
  • 神经网络能不能完全拟合y=x² ???
  • ubuntu部署ollama+deepseek+open-webui
  • (五)智能体与工具协同——打造智能对话的超级助手
  • (四)数据检索与增强生成——让对话系统更智能、更高效
  • (三)链式工作流构建——打造智能对话的强大引擎
  • Nginx介绍及使用