首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >AI大模型企业应用实战(10)-LLMs和Chat Models

AI大模型企业应用实战(10)-LLMs和Chat Models

原创
作者头像
JavaEdge
修改2026-04-24 17:53:09
修改2026-04-24 17:53:09
4180
举报
文章被收录于专栏:AIGC大模型应用AIGC大模型应用

1 模型

两种模型:

  • LLM
  • 聊天模型

咋用:

  • 提示模板格式化这些模型的输入
  • 输出解析器来处理输出

LangChain 中的语言模型有两种类型:

1.1 Chat Models

通常由 LLM 支持,但针对会话进行调整。提供者 API 使用与纯文本补全模型不同的接口。输入不是单个字符串,而是聊天信息列表,输出是一条AI信息。

GPT-4 和 Anthropic 的 Claude-2 都是作为聊天模型实现。

1.2 LLM

LangChain 的 LLM 指纯文本补全模型。它们封装的 API 将字符串提示作为输入,并输出字符串完成。OpenAI 的 GPT-3 就是 LLM 实现。

这两种 API 类型具有不同输入输出模式,并非所有模型都一样。不同模型有不同最佳提示策略,如:

  • Anthropic 模型最适合用 XML
  • OpenAI 模型最适合用 JSON

示例将使用聊天模型,可用 Anthropic 或 OpenAI 等 API 或通过 Ollama 使用本地开源模型。

2 实例

OpenAI与ChatOpenAI

代码语言:python
复制
# 调用chatmodels
from shared.llm_utils import create_qwen_model
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage

chat = create_qwen_model(
    temperature=1,
    streaming=True,
)

messages = [
    AIMessage(role="system",content="你好,我是JavaEdge!"),
    HumanMessage(role="user",content="你好JavaEdge,我是狗剩!"),
    AIMessage(role="system",content="认识你很高兴!"),
    HumanMessage(role="user",content="你知道我叫什么吗?")
]

response = chat.invoke(messages)
print(response)

注意,此时必须设置 lmstudio 的提示模板位 ChatML:

3 流式调用

3.1 为啥流式输出?

大模型都是一个个字打出来,免得让你觉得他每次神经网络计算太慢了,让你感觉他一直在持续输出。

代码语言:python
复制
# LLM类大模型的流式输出方法

from shared.llm_utils import create_qwen_model

#构造一个llm
llm = create_qwen_model(
    temperature=1,
    streaming=True,
)

for chunk in llm.stream("写一首关于秋天的诗歌"):
    print(chunk,end="",flush=False)

所以,token 就很重要。

4 追踪Token的使用

LLM的toekn追踪

代码语言:python
复制
from shared.llm_utils import create_qwen_model
from langchain_community.callbacks import get_openai_callback

# 构造一个llm
llm = create_qwen_model(
    temperature=1,
    streaming=True,
)

with get_openai_callback() as cb:
    result = llm.invoke("给我讲一个笑话")
    print(result)
    print(cb)

Chat Models的token追踪

代码语言:python
复制
#chatmodels的token追踪
from shared.llm_utils import create_qwen_model
from langchain_community.callbacks import get_openai_callback

llm = create_qwen_model(
    temperature=1,
    streaming=True,
)

with get_openai_callback() as cb:
    result = llm.invoke("给我讲一个笑话")
    print(result)
    print(cb)

5 自定义输出

  • 输出函数参数
  • 输出json
  • 输出List
  • 输出日期

讲笑话机器人:希望每次根据指令,可以输出一个这样的笑话。

代码语言:python
复制
from shared.llm_utils import create_qwen_model
from langchain_core.output_parsers import PydanticOutputParser
from langchain_core.prompts import PromptTemplate
from pydantic import BaseModel,Field,field_validator

# 构造LLM
model = create_qwen_model(
    temperature=1,
    streaming=True,
)

# 定义个数据模型,用来描述最终的实例结构
class Joke(BaseModel):
    setup:str = Field(description="设置笑话的问题")
    punchline:str = Field(description="回答笑话的答案")

    # 验证问题是否符合要求
    @field_validator("setup")
    def question_mark(cls,field):
        if field[-1] != "?":
            raise ValueError("不符合预期的问题格式!")
        return field

# 将Joke数据模型传入
parser = PydanticOutputParser(pydantic_object=Joke)


prompt = PromptTemplate(
    template = "回答用户的输入.\n{format_instructions}\n{query}\n",
    input_variables = ["query"],
    partial_variables = {"format_instructions":parser.get_format_instructions()}
)

prompt_and_model = prompt | model
out_put = prompt_and_model.invoke({"query":"给我讲一个笑话"})
print("out_put:",out_put)
parser.invoke(out_put)

LLM的输出格式化成python list形式,类似'a','b','c'

代码语言:python
复制
from langchain_core.output_parsers import CommaSeparatedListOutputParser
from langchain_core.prompts import PromptTemplate
from shared.llm_utils import create_qwen_model

# 构造LLM
model = create_qwen_model(
    temperature=1,
    streaming=True,
)

parser = CommaSeparatedListOutputParser()

prompt = PromptTemplate(
    template = "列出5个{subject}.\n{format_instructions}",
    input_variables = ["subject"],
    partial_variables = {"format_instructions":parser.get_format_instructions()}
)

_input = prompt.format(subject="常见的小狗的名字")
output = model.invoke(_input)
print(output)
#格式化
parser.parse(output.content)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 模型
    • 1.1 Chat Models
    • 1.2 LLM
  • 2 实例
    • OpenAI与ChatOpenAI
  • 3 流式调用
    • 3.1 为啥流式输出?
  • 4 追踪Token的使用
    • LLM的toekn追踪
    • Chat Models的token追踪
  • 5 自定义输出
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档