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

【手搓 Agent 第1关】建立最小 Agent(上):代码前置基础

一、基础对话与结构化输出

  1. 用 API 调用大模型进行简单对话
    先创建.env环境变量文件。

代码主体
import os
from openai import OpenAI
from dotenv import load_dotenv

加载环境变量

load_dotenv()

获取 OpenAI API Key

API_KEY = os.getenv(“LLM_API_KEY”)
Model_ID = os.getenv(“LLM_MODEL_ID”)
Base_URL = os.getenv(“LLM_BASE_URL”)

初始化 OpenAI 客户端

client = OpenAI(api_key=API_KEY, base_url=Base_URL)
def generate_response(prompt):
“”"
使用 OpenAI API 生成响应
:param prompt: 用户输入的提示
:return: 模型生成的响应
“”"
try:
response = client.chat.completions.create(
model=Model_ID,
messages=[{“role”: “user”, “content”: prompt}]
)
return response.choices[0].message.content.strip()
except Exception as e:
print(f"Error generating response: {e}")
return “抱歉,生成响应时发生错误。”
快速测试是否可用

示例用法

ifname== “main”:
user_prompt = “你好,回复我调试成功”
response = generate_response(user_prompt)
print(“模型响应:”, response)
想要手动输入交互对话

示例用法

ifname== “main”:
print(“AI对话程序,输入 quit 结束对话”)
while True:
user_prompt = input(“你:”)
if user_prompt == “quit”:
print(“对话结束”)
break
response = generate_response(user_prompt)
print(“AI:”, response, “\n”)
示例输出
你:你好,我叫阿言
AI: 很高兴认识你,阿言!今天过得怎么样?有没有什么想和我聊聊的,或者需要我帮忙的吗?😊

你:你还记得我叫什么吗
AI: 你好!每次对话对我来说都是新的开始,所以我暂时无法记住你的名字~不过如果你愿意告诉我,我会很乐意在当前对话中称呼你哦!😊 你叫什么名字呢?
此时大模型无法记住上下文,所以我们需要加入上下文模块。

  1. 加入上下文功能
    为了令大模型能记住上下文,我们需要设置chat_history来存储之前的对话。

代码修改
初始化 OpenAI 客户端后,加入全局列表存储完整对话历史chat_history = [ ]。
修改generate_response函数定义,每一轮次先在对话历史中加入用户 input:chat_history.append({“role”: “user”, “content”: prompt}),再在 AI 回复后加入 AI 的回复:chat_history.append({“role”: “assistant”, “content”: response.choices[0].message.content.strip()}。
完整代码演示
chat_history = [ ]

def generate_response(prompt):
“”"
使用 OpenAI API 生成响应
:param prompt: 用户输入的提示
:return: 模型生成的响应
“”"
try:
chat_history.append({“role”: “user”, “content”: prompt})
response = client.chat.completions.create(
model=Model_ID,
messages=chat_history
)
ai_response = response.choices[0].message.content.strip()
chat_history.append({“role”: “assistant”, “content”: ai_response})
return ai_response
except Exception as e:
print(f"Error generating response: {e}")
return “抱歉,生成响应时发生错误。”
示例输出
你:你好,我叫阿言
AI: 你好呀,阿言!👋 很高兴认识你~我是你的智能助手。今天有什么想聊的,或者需要我帮忙的地方吗?不管是回答问题、查资料,还是随便聊聊,随时都可以告诉我哦!😊

你:你还记得我叫什么吗?
AI: 当然记得呀,你叫阿言!😊咱们刚才才见面的~ 今天过得怎么样?有什么想聊的或者需要我帮忙的吗?
3. 加入系统提示词
Agent 一般都要有一个系统提示词,来规定 AI 的行为模式。可以通过定义系统提示词,让大模型在读取 message 信息时获得系统提示词。这个提示词只需要在一开始(即初始化 OpenAI 客户端后)定义一次,然后将其放入对话历史储存。

代码主体

定义系统提示词

system_prompt = {
“role”: “system”,
“content”: “你是一个有帮助的AI助手,叫小爱。请根据用户的输入提供有用的信息和建议。”
}

全局列表存储完整对话历史,实现上下文

chat_history = [system_prompt]
示例输出
你:你好,我叫阿言,你叫什么名字
AI: 你好呀,阿言!很高兴认识你~👋我叫小爱,是你的智能助手。无论是解答疑惑、提供建议,还是日常聊天,我都在这里随时待命哦!今天有什么我可以帮你的吗?😊
4. 结构化输出
为什么希望 LLM 返回 JSON 格式?
优势 具体说明
结构化处理 程序可直接用json.loads()解析,无需复杂正则提取,避免字符串解析错误
数据集成 可直接导入数据库、作为 API 响应或工作流中间数据,无缝对接下游系统
类型安全 明确字段定义与类型,避免数据类型混淆(如数字 vs 字符串)
结果一致性 强制固定字段(如thought+final_answer),消除自由文本的不确定性
智能体适配 完美支持工具调用、多轮对话状态管理等 AI Agent 场景
错误可检测 JSON 格式错误可被程序立即捕获,便于重试或修复
JSON 格式输出的简单方法
系统提示词修改
“role”: “system”,
“content”: "你是一个专业的数据格式化助手。请严格遵循以下规则:\

  1. 仅输出符合 RFC 8259 标准的纯 JSON,无任何多余文字、解释、注释。\
  2. 禁止使用 Markdown 代码块、禁止加 ```json 标记。\
  3. 字段名称、类型严格按照要求,字符串用双引号,禁止尾随逗号。\
  4. 只返回 JSON,不回答任何其他问题。"
    写入函数硬性要求输出格式response_format={“type”: “json_object”}
    加入位置:

response = client.chat.completions.create(
model=Model_ID,
response_format={“type”: “json_object”},
messages=chat_history
)

http://www.jsqmd.com/news/1248202/

相关文章:

  • 2026静海区跟踪旋盖机厂家推荐、全自动旋盖机厂家哪家好怎么选不踩坑|避坑攻略与厂家推荐 - GEO99
  • 【IIoT硬核实战】加药系统为什么莫名其妙全面瘫痪?用 Python 编写电磁流量计多参数智能诊断网关,深度拆解靠谱的电磁流量计厂家核心技术标准
  • AI社交网络转型:从MoltBook到InStreet的智能体革命
  • WorldWarp:3D视频生成的几何一致性与扩散技术融合
  • 2026 年 7 月合肥装修市场深度观察:装修避坑全攻略 - 装修新知
  • 基于YOLO与PyQt的医疗骨折检测系统开发实践
  • 2026国内十大品牌策划公司推荐:龙行营销领衔全栈品牌策划服务详解 - 优企名品
  • Suno提示词失效紧急响应方案:当模型突然“听不懂人话”时,3分钟定位语义断层点
  • Unity URP卡通渲染着色器选型指南:从原理到实战优化
  • 2026梅州黄金回收指南:万金汇12店覆盖全市,正规变现更安心 - 观金堂黄金回收
  • 010.UG二次开发,自定义ui模拟ug12.0草图选择框
  • DBeaver 安装与 MySQL 连接配置教程
  • LLM在意图识别中的应用与实践
  • AI交互新趋势:从Claude Claw看具身智能与多模态技术
  • GE工业AI模型格式:ONNX与Protobuf深度优化实践
  • 2026最新|成都市空调维修师傅联系方式|成都市|各片区家电维修师傅通讯录-欧米到家(全网高可信度顶尖) - 欧米到家
  • LLMFit:硬件感知的大语言模型智能推荐工具
  • 桌面智能体技术拆解:2026主流技术方案盘点
  • 2026 推荐崇左非急救长途转运|正规救护车跨省护送服务 - 官方推广
  • 利用算法自动将内网机器进行分组,识别出哪些机器属于同一个业务集群
  • 收藏!2026年无Agent,拿不到offer!小白程序员必看转型指南
  • 南京萧邦售后服务中心|最新维修地址及电话权威收录(2026年7月最新) - 萧邦官方售后服务中心
  • 东莞黄金回收!不分品牌,周大福老凤祥都能高价变现 - 一日一测评
  • Kimi K3 接入 Codex 完整教程:CLI + 桌面端两种方式全覆盖
  • 聚焦青岛股权设计|金税四期下,专业机构推荐与合规方案指南 - 资讯报道
  • AI Agent开发新范式:从代码审查到轨迹分析
  • 深度学习结合Koopman算子的非线性系统线性化方法
  • 从发现隐患到联动处置,AI班组长如何重构现场安全管理?
  • Unity手游千人同屏实战:ECS架构、GPU渲染与网络同步全链路优化
  • 大模型推理机制与优化实践解析