s01 搭建第一个对话智能体

s01:搭建第一个对话智能体

什么是对话智能体

大模型是大脑,是外部提供的,所以我们要做的就是接收用户的输入,把用户的输入转发给云端大模型,然后再接收云端大模型的响应返回给用户,这样就实现了一个简单的对话智能体,这里我们使用Python和Acthropic ADK 来搭建这个程序

下面给出最简代码

python 复制代码
import os
  from anthropic import Anthropic
  from dotenv import load_dotenv

  load_dotenv(override=True)
  client = Anthropic(base_url=os.getenv("ANTHROPIC_BASE_URL"))
  MODEL = os.environ.get("MODEL_ID", "deep-seek-chat")
  //以上是一些环境加载,结合AI帮助大家看懂以及配置
  
  //存储和模型的会话历史
  messages = []

  while True:
      user_input = input("你 >> ")
      if user_input.strip().lower() in ("q", ""):
          break

      messages.append({"role": "user", "content": user_input})

			//这个接口相当于把messages发送到云端大模型然后接收到对应的响应
      response = client.messages.create(
          model=MODEL,
          system="你是一个友好的助手。简洁回答。",
          messages=messages,
          max_tokens=1024,
      )

			//单次对话,取响应的第一个元素即可
      reply = response.content[0].text
      //补充会话历史
      messages.append({"role": "assistant", "content": reply})
      //打印返回消息
      print(f"AI >> {reply}\n")
      
      //->进入下一轮对话等待用户的消息

流程大概是

while -> 接收用户输入(补充上下文) → 发送给大模型 → 返回响应(补充上下文) → 进入下一次循环

讲解一些基本的数据结构

message

列表里面套元组,基本格式:

python 复制代码
{"role":[user/system/assistant],"content":str}
# content的内容通常为字符串
# role 的内容对应只有三个

content block

content 可以是 字符串,也可以是 列表:

纯文本

python 复制代码
{"role": "user", "content": "你好"}

带工具结果

python 复制代码
{"role": "user", "content": [
{"type": "tool_result", "tool_use_id": "toolu_xxx", "content": "晴,25°C"}
]}

模型回复的 response.content 也是列表:

只有文本

python 复制代码
[TextBlock(type="text", text="今天天气不错")]

文本+工具调用

python 复制代码
[
TextBlock(type="text", text="让我查一下"),
ToolUseBlock(type="tool_use", id="toolu_xxx", name="get_weather", input={"city": "北京"})
]

tool definition

python 复制代码
{
"name": "get_weather",      # 工具名称
"description": "查询天气",  # 工具描述
"input_schema": {          # JSON Schema 输入格式
"type": "object",          # 表明是一个object类型(也就是传入键值对输入)
"properties": {            # 声明调用工具的时候需要提供的字段
"city": {"type": "string"} # "city"字段 类型string 
},
"required": ["city"]       # 表名那个字段是必须提供的
}
}

Response对象

python 复制代码
response = client.messages.create(...)
python 复制代码
response.content       # List[ContentBlock] --- 回复内容
response.stop_reason   # "end_turn" | "tool_use" | "max_tokens"
response.usage         # Token 用量 {input_tokens, output_tokens}
相关推荐
神仙别闹7 分钟前
基于Python+MySQL实现(Web)个人博客系统
python·mysql·php
二十七日秋9 分钟前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
我才是银古11 分钟前
把 666 个会话摊开看:一份 DSH 使用经验与教训的复盘
ai·deepseek·dsh
乌恩大侠12 分钟前
从真实 5G 网络采集 AI 训练数据:基于 NVIDIA Aerial Data Lake 构建 AI-RAN 数据平台
网络·人工智能·5g·aerial·o-ru·ai-ran
星恒随风23 分钟前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip
晚风叙码23 分钟前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
空堂与归27 分钟前
国产开源登顶全球第一,1.3B OXR 登顶三榜:RSI 闭环重塑文档解析
人工智能·ai·agent
小咕聊编程36 分钟前
基于Django的个人摄影博客网站设计与开发
后端·python·django
无足鸟ICT39 分钟前
【RHCA+】影响Linux系统性能的因素
linux·运维·服务器
论文复现现场43 分钟前
DeepSeek V4.1 Flash 和 V4 Pro 有什么区别?API 价格、性能与迁移建议
java·服务器·人工智能·python·大模型api·deepseek·deepseek v4.1