LangChain Model I/O

Model I/O

模型调用流程
1 写好prompt
2 调用大模型。收入大模型的
3 返回结果,对结果进行解析

一个模型调用的输出作为另外一个模型的输入。把模型调用的输出做预处理再给到下一个模型的输入。
很多时候把输出转化为json给下游的模型

常用接口

同步
invode 一次
batch 批量
stream 流式响应 。 一个字一个字的返回

异步
ainvode
abatch
astream 流式响应 。 一个字一个字的返回

Chat 基本原理

关键属性
1 model 模型
2 messages 消息
3 tools
外部函数的描述要清晰。 因为外部函数很多,大模型要推理出来使用哪个函数
4 tool.choice. null 不走外部函数。 如果是auto,大模型判断要不要调用外部函数

程序把提示词发给大模型,大模型给回复

一、消息类型定义与用途

消息类型 角色 典型内容 作用
SystemMessage 系统指令或上下文设定 设定模型行为、角色、对话规则等 引导模型生成风格,提供全局约束(如“你是一个严谨的数学老师”)
HumanMessage 用户输入 用户的问题、请求或对话内容 触发模型生成回复的直接输入源
AIMessage AI 模型的回复 模型生成的回答、建议或操作建议 记录对话历史,维持上下文连贯性

例子:

ali_llm.py 定义

from langchain_openai import ChatOpenAI
import os

def create_llm() -> ChatOpenAI:
    """创建并返回配置好的大模型实例"""
    return ChatOpenAI(
        api_key=os.getenv("DASHSCOPE_API_KEY") or "your_api_key_here",
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
        model="qwen2.5-math-7b-instruct"
    )

测试代码

from langchain_core.prompts import ChatPromptTemplate
from ali_llm import create_llm

chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "你是一个有帮助的AI机器人,你的名字是{name}。"),
        ("ai", "我很好,谢谢!"),
        ("human", "{user_input}"),
    ]
)

messages = chat_template.format_messages(name="小明", user_input="你叫什么名字?")

llm = create_llm()
response = llm.invoke(messages)
print(response.content)

few show -- 提示词让大模型有规划能力

如果模型推理能力弱的大模型,你给他一个复杂的问题,他回答不好。所以我们需要通过few show拆解步骤。
大概步骤
1 准备好问题,拆解的步骤
2 组装成提示词模板+用户的提的问题给到大模型

开发流程

原理:大模型针对复杂的问题,并不具备很好的规划能力(目前阶段是这样)。我们针对不同的场景,提供不同提示词(问题,拆解步骤和答案)+ 用户的问题给到大模型,
让模型参考学习,并在同一个prompt的末尾提出新的问题,依次提升模型的推理能力。

比如做一个智能报表系统
场景1 :查询用户表的数量
场景2:查询用户表的userid为123的记录
场景3:分析这个月的销量
我们要把这3个场景的问题拆解好步骤和答案后,连同用户的问题给到大模型,大模型才能给到准确的回答。否则一些推理能力不是很强的大模型,他回答不清楚。

1。准备好不同场景的提示词 ,可能有几百个,甚至几千个

2. 用户发起问题 (用户)

3. 基于语义相似度等挑选部分提示词(可能只有几个)+ 用户问的问题,一起给到大模型 (目的:减少token,提高效率,降费用)

4. 大模型给答案,cache回答的内容

5. 用户进一步问问题

6. 循环3,+上次回答的内容一起给到大模型

功能

Chat Model

通过 ChatPromptTemplate,FewShotChatMessagePromptTemplate 简化模板替换工作
ChatPromptTemplate

提示词模板选择器

https://python.langchain.com/v0.1/docs/modules/model_io/prompts/example_selectors/

Function call

定义和大模型交互的函数入参尽量为字符串

函数说明书

sunwukong={
        "type": "function",
        "function": {"name": "sunwukong_function",
                      "description": "用于执行孙悟空算法函数,定义了一种特殊的数据集计算过程",
                      "parameters": {"type": "object",
                                     "properties": {"data": {"type": "string",
                                                             "description": "执行孙悟空算法的数据集"},
                                                   },
                                     "required": ["data"],
                                    },
                     }
    }

parameters: 如果参数是数组写数组,除了数组外 就写object
properties: 对参数的描述

参考资料

posted @ 2025-03-14 16:26  向着朝阳  阅读(42)  评论(0)    收藏  举报