写 Agent 不会调 LLM?这篇把调用逻辑给你打通了

博客配套代码发布于github:02 LLM基础与调用

本系列所有博客均配套Gihub开源代码,开箱即用,仅需配置API_KEY。

知识点LLM了解与调用、Prompt编写与逻辑构思、多轮对话记忆、独立搭建一个智能体。


前言:

在上篇文章,我们已对Agent有了最初步的了解。接下来我们深入了解下什么是llmprompt ,并开始独立完成我们自己搭建的的第一个Agent。

一、了解LLM

LLMLarge Language Model ,即我们常说的大语言模型。市面上琳琅满目的如deepseek,kimi,豆包,chatgpt,gemini等都属于llm。

llm可以说是agent最核心的那个大脑,没有大脑自然无法组织起一个agent任何的行为。而如果想使用这些大语言模型,一般我们会选择到它们的官网上去获取api-key(真的不贵,deepseek我充了十块用几月没用完)。有了它作为api接口,我们就能自由的本地调用ai。

同时llm模型分为非常多类,有视觉模型 的,有深度思考 的(能看到ai思考链但返回数据比较慢),有蒸馏 模型的,有闭源/开源的。我们日常使用agent,就得按需选择。

当然,可能有小伙伴会想本地部署llm。我们后面文章会教这点,但还是不太做推荐 。很简单的道理,本地部署的llm对个人而言只能是蒸馏版,自己玩用用可以,但没法在绝大多数生产项目级场景下使用。如果真需要本地部署或者数据敏感场景,一般也是公司花大价钱买一堆算力卡来做这个事。少数能预见的使用场景,也就是学习微调了(同样也需要非常高的显卡存储)。

二、LLM怎么调用

我们这里以deepseek的api-key调用为例。

这里假设你已经学习过上篇文章,知道api-key如何获取。

打开deepseek-api,用官方给我们的文档来完成调用:

其中略微讲解下:

api_key=os.environ.get('DEEPSEEK_API_KEY') 这里,就是让我们在环境变量中写入这个东西,这样的话,你就无需显式应用api-key,能更好的保护隐私安全。当然如果你嫌麻烦,目前直接改成api_key="xx"也是可以的。

"role":"system ": 角色是系统系统提示词,即你要在这里给ai设定一个什么角色,比如你是一个猫娘(

"role":"user ": 角色是用户你对ai说的话

stream=False 即是否允许流式输出 ,如果为True,就是允许,你就能在控制台上看到输出结果像流水一样慢慢流出。反之则是得等生成完全才会返回。

如上,完成调用后,就能看到返回的信息了:

三、Prompt基础逻辑

回忆下官方文档的这里:

{"role":"system","content":"You are a helpful assistant..."}这是什么?这就是prompt(提示词)

提示词是agent构建中极其重要的一环。提示词提示词,即提示ai你是一个什么身份,在这个身份下你要干什么事情。比如你是一个智能客服/你是一个NBA智能预测比赛专家/你是一个猫娘,你负责帮助用户理解产品/帮助用户预测比赛/帮助用户...。

你是一个AI助手,擅长解释技术概念。 任务:用小学生能听懂的话,解释什么是大模型。 要求:不超过100字,用中文回答。

如上: 确定身份+给出任务+限定输出

一个agent好不好,一定程度上取决于这个提示词写的好不好,甚至市面上有专门的岗位就是提示词工程师。

同时,你肯定也能感觉出来,这个提示词明显写的非常的简单。实际上如果真要写项目的提示词,我们会采取更加复杂的写法来适应实际业务,举个例子:

javascript 复制代码
你是一个智能生活助手,具备以下能力:
1. 调用 weather_api(location) 获取指定城市的天气数据
2. 根据温度、降水概率给出穿衣建议
​
请按以下步骤执行:
1. 理解用户需求,确定城市
2. 调用 weather_api 获取天气
3. 分析数据,生成建议
4. 用友好语气回复用户
​
输出规则:
- 如果需要调用工具,只输出 JSON 格式的工具调用指令
- 否则,正常回复用户
​
示例:
用户:北京今天穿什么?
AI:{"tool": "weather_api", "args": {"location": "北京"}}

如上,有角色、有流程、有能力(调用工具)、可以自动化 。这才是prompt的正确用法。

能调用工具这点我们下一节立马就会学到。其他的提示词写法其实你看类似的提示词 多分析分析,或者多让ai帮你写写提示词,你跟着依葫芦画瓢对着多写,也能掌握个七七八八了。

prompt的几个关键概念这里一并提及:

Zero/Few-shot(控制模型生成方式) 不给/给几个示范例子,让模型回答/模仿回答

实践:在提示词内直接加几行实例即可(请仿照下列文本格式输出...)

Cot(Chain-of-thought)让模型思考步骤,提高复杂推理准确性

实践:在提示词内强调-请逐步思考/思考步骤如下...

显而易见,理解与实操都很简单,这俩概念了解即可,在真正提示词编写过程中不必钻研太深。

四、简单交互实例(多轮问答agent)

了解完llm与prompt,我们可以尝试搭建我们的第一个agent了。

先确定好思路:我们打算让ai当一个老师,教我们历史知识,同时我们肯定希望它能保持记忆,记住上下文对话。而大模型在原始状态下是不会保存与用户的对话记忆的。所以我们需要为其加入点新功能:

再回到下面这个地方:

ini 复制代码
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "Hello"},
    ]

除了提供各种角色身份外,它同样有个非常重要的特点:消息列表

这意味着,如果我们想要多轮对话,让ai能记住我们的上下文,就可以通过不断往里面追加代码,让messages变得越来越多,

所以,我们可以通过while 1: 无限循环的方式不断往里追加messages来实现我们的目的:

ini 复制代码
# ...
    while 1:
        response = agent_client.chat.completions.create(
            model="deepseek-chat",
            messages=messages
        )
        answer = response.choices[0].message.content
        print(f'回答:{answer}')
​
        # 询问是否还有其他问题
        user_input =input('您还有其他想继续问的吗 | (exit退出)\n')
        if user_input == "exit":
            break
​
        # 继续记录对话(涵盖用户追问 + ai上句回答)
        messages.append({"role":"user","content":user_input})
        messages.append({"role":"assistant","content":answer})
# ...

细心的同学已经发现了:这里加了个一个新role:assistant,即助手。

它表示的身份是助手,即ai自己。所以我们这里为其添加的content是answer。

如图,测试完成,符合我们预期,此时的它明显可以记忆上下文对话。

但同时仍要提醒一下:我们目前完成的很明显只是个demo,它只能拥有短期记忆 ,在正规开发中记忆的写法肯定不会这么简单。后面随着学习的深入时,我们会构思应该用怎样的方式,让它拥有一个不错的可以长期存储,性能更优的解法。

五、深入理解LLM的温度

1. 什么是温度?

想象一下,你在指挥一个语言模型(LLM)说话。

  • 低温度(如 0.1) :就像一个严格、谨慎的学霸 。它说话时,会极度倾向于选择概率最高的下一个词 ,因此回答会非常稳定、确定、符合事实和逻辑,但也可能显得有点"刻板"和"缺乏创意"。
  • 高温度(如 0.8 或 1.0) :就像一个天马行空的创意家 。它说话时,会更随机地选择下一个词 ,哪怕这个词的概率不是最高。因此,回答会更丰富、更有创意、更多样化 ,但也更容易产生幻觉(一本正经地胡说八道) ,且答案的不稳定性更高。

本质上,温度控制了模型输出的随机性和创造性。

2. 温度参数的范围与影响

温度参数(Temperature)控制模型输出文本的随机性(Randomness)和创造性(Creativity) 。它通过调整模型选择下一个词的概率分布来工作。

温度范围 输出特点 适用场景 风险提示
0 (确定性) 极度稳定 。相同输入几乎总是得到完全相同的输出。模型会"死板"地选择概率最高的词。 代码生成技术文档数学计算需要高度准确性和一致性的问答 输出可能显得机械、重复,缺乏灵活性,无法应对复杂微妙的语境。
0.1 - 0.5 (保守) 倾向选择高概率词 ,输出确定、集中、连贯,符合常理。 常规对话信息查询摘要翻译编写简单的解释说明 创造性较低,可能略显"平淡"。
0.6 - 1.0 (平衡) 在确定性和多样性之间取得平衡 。这是大多数模型推荐的默认范围(如 DeepSeek 推荐 0.6)。 通用写作 (文章、邮件)、智能客服代码辅助 (需要一定解释性)、头脑风暴初步想法 需要根据具体任务微调,否则可能过于平庸。
1.1 - 1.5 (创意) 更随机、更多样化 ,模型会尝试选择一些非主流但可能合理的词 ,输出新颖、富有想象力 故事创作诗歌写作广告文案生成性艺术需要探索多种可能性的任务 事实准确性可能下降 ,内容可能出现逻辑跳跃语法错误"幻觉"(一本正经胡说八道)
> 1.5 (极高) 极度随机、难以预测 。模型行为可能变得非常不稳定,输出可能非常荒谬或无意义 极少数需要极度破坏性创意的任务(实验性)。 实用性极低 ,通常不推荐。输出质量急剧下降,几乎不可控。

3. 如何在代码中实践温度测试?

理解了温度的概念后,让我们通过代码来验证它。我们将对同一个问题,分别使用低温度高温度进行两次调用,观察输出的差异。

LLM的温度同样是个很重要的知识点,但设置同样非常简单,只需加个temperature=x即可:

ini 复制代码
# ...
response_high_temperature = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一个科学解说员,请用生动形象的语言回答问题。"}, # 提示词角色
        {"role": "user", "content": "请用一句话描述量子力学的奇妙之处。"}, # 用户输入的对话
    ],
    temperature=0.1
)

完整代码如下:

ini 复制代码
# s03_llm_temperature
from config import OPENAI_API_KEY
from openai import OpenAI
​
client = OpenAI(api_key=OPENAI_API_KEY, base_url="https://api.deepseek.com")
msg = [{"role": "user", "content": "请用一句话生动形象地描述量子力学的奇妙之处。"}]
​
response_low_temperature = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一个科学解说员,请用生动形象的语言回答问题。"}, # 提示词角色
        {"role": "user", "content": "请用一句话描述量子力学的奇妙之处。"}, # 用户输入的对话
    ],
    temperature=0.1
)
​
response_high_temperature = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一个科学解说员,请用生动形象的语言回答问题。"}, # 提示词角色
        {"role": "user", "content": "请用一句话描述量子力学的奇妙之处。"}, # 用户输入的对话
    ],
    temperature=1.3
)
​
​
# 测试1:低温度 (稳定)
print(f"温度 0.1: {response_low_temperature.choices[0].message.content}")
​
# 测试2:高温度 (随机)
print(f"温度 1.3: {response_high_temperature.choices[0].message.content}")

如图,很明显高温下的LLM更为热情活跃。

这就是我们在Agent构思时需要好好考虑的:你需要一个足够冷静,还是一个热情洋溢的助手?正确的温度才能导向正确的场景。

六、总结

知识点概括LLM了解与调用、Prompt编写与逻辑构思、多轮对话记忆、独立搭建一个智能体、LLM温度设置。

这里我们已初步掌握了如何做一个能用能玩的智能体,效果基本等同于市面上的大部分ai模型直接对话。但明显它的功能水平还差点意思,没有agent的"味儿"。

下篇内容我们会开始深入研究Function calling & 工具调用,让ai能利用外部的工具来干活。

🚀一键跳转[Ai Agent] 03 Function Calling实战:让AI真正"调用工具"完成任务

📌 项目代码 + 后续案例合集 全部发布在 Github 仓库 agent-craft ,持续更新中,欢迎Star⭐!

相关推荐
金智维科技官方4 小时前
智能体,重构企业自动化未来
人工智能·自动化·agent·智能体·数字员工
Elwin Wong5 小时前
skill-creator 大更新
agent·skill·skill-creator
killer_queen48046 小时前
AI_agent(三) MCP协议(二)
c++·agent·mcp·a2a
mantch6 小时前
全网最全 Claude Skills 指南:从原理到应用,一篇搞定!
人工智能·aigc·agent
阿里云云原生7 小时前
Agent 越用越聪明?AgentScope Java 在线训练插件来了!
前端·agent
小马过河R7 小时前
OpenClaw 记忆系统工作原理
人工智能·机器学习·语言模型·agent·openclaw·智能体记忆机制
码农垦荒笔记7 小时前
OpenClaw 实战#05-5:第五层工程拆解——Skill 工程设计规范(硬干货版)
人工智能·agent·设计规范·openclaw
带刺的坐椅7 小时前
Solon AI v3.9.4 发布(智能体开发框架,支持 Java8 到 Java25)
ai·llm·agent·solon·mcp·tool-call·skills
ZaneAI8 小时前
🚀 Claude Agent SDK 使用指南:文件检查点与回退 (File Checkpointing)
langchain·agent·claude