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}
相关推荐
Dxy12393102165 分钟前
Python如何结合AI解决数据分析问题
人工智能·python·数据分析
疯狂打码的少年7 分钟前
【计算机网络】子网掩码与子网划分计算(含CIDR表示法)
服务器·笔记·计算机网络·php
制造业的搬运工10 分钟前
智能家居工控PCB可靠性检测规范与制程管控实践
大数据·网络·人工智能·制造·pcb工艺
IvanCodes15 分钟前
Python 基础语法(七):推导式与常见遍历写法
开发语言·python
想要入门的程序猿33 分钟前
回调函数学习
java·网络·学习
zhangzeyuaaa37 分钟前
Python requests:raise_for_status() 与 4xx/5xx 异常层次详解
开发语言·python
泡海椒44 分钟前
动态代理核心原理:JQuick-Java接口规则自动生成机制解析
java·开发语言·python
网硕互联的小客服1 小时前
怎样在CMD里用chkntfs /x C: 命令来取消磁盘自检?——原理与实践全解
运维·服务器·网络
余槐i1 小时前
Firecrawl 实战:将网站转换为大模型可用数据
人工智能·python·工具·firecrawl
shirsl1 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法