AIGC(生成式AI)试用 53 -- 个人知识库 DocsGpt(Agent)
Agent智能体是具备自主感知、记忆、决策、交互与执行能力的智能系统是人工智能产品及服务的重要形态。 -- 豆包AI 智能体是能够感知并响应其所处环境、采取行动以实现预设目标的自动化实体。五大核心能力界定- 自主感知可主动 / 被动从环境中获取并理解信息无需人类逐次手动输入- 记忆可存储、检索和复用历史信息保证行为与上下文的连贯性- 决策可自主拆解任务、规划执行路径、选择行动方案- 交互可与人类、其他智能体、系统设备进行双向协同沟通- 执行可调用外部工具、软件系统或硬件设备实际改变环境状感知输入 → 记忆检索 → 决策生成 → 行动执行 → 反馈学习-- CSDN AI助手agent是强化版的promptagent 与 prompt 的区别- Agent 大模型 记忆模块 工具集Tool/Skills 规划引擎 安全机制 各类内置 Prompt 指令 -- 豆包- Prompt一问一答A跟他一问思考确认决策执行答案/结果- Agent 高度自治、自驱的Prompt 任务执行/实现- 个人理解好的prompt清晰 明确是agent的基础然而单纯的prompt不可能构成agent最简Agent实现API_URL { answer_new : fhttp://localhost:7091/api/answer, models_getlist : fhttp://localhost:7091/api/models, conversations_getlist : fhttp://localhost:7091/api/get_conversations, conversations_getsingle : fhttp://localhost:7091/api/get_single_conversation, conversations_rename : fhttp://localhost:7091/api/update_conversation_name, }1感知输入 , select model question ai-- select Model -- creat new conversation -- rename conversation# check model list, to file model_id def get_model(): url API_URL[models_getlist] model_list [] response requests.get(url) result response.json() for model in result[models]: mn fModel_Name: {model[display_name]}, Model_Id: {model[id]} model_list.append([mn]) return model_list # creat new blan conversation without any question def creat_new_chat(): url API_URL[answer_new] payload { question: f, ## history: chat_history, ## conversation_id: 6a2524f29404e7c57b19e98b, ## prompt_id: , ## chunks: 2, ## retriever: , ## api_key: string, ## agent_id: string, ## active_docs: , ## isNoneDoc: True, ## save_conversation: True, ## visibility: hidden, model_id: docsgpt-local, ## passthrough: passthrough, ## temperature: 0.0, ## top_k: 5, } response requests.post(url, jsonpayload) # get conversations list def get_conversations(): url API_URL[conversations_getlist] conversation_list [] response requests.get(url) result response.json() ## print(f-- Conversation: {response}\n{result}) for conversation in result: cn {Conversaton_Name: f{conversation[name]}, Conversaton_Id: f{conversation[id]}} conversation_list.append(cn) print(f-- {conversation_list}) return conversation_list # get single conversation, for creat_new_chat() used def get_single_conversation(covid): url API_URL[conversations_getsingle] response requests.get(f{url}?id{covid}) result response.json() return result # rename conversion name, make sure show clear def rename_chat(chat_name): url API_URL[conversations_rename] conversation_list get_conversation() covid conversation_list[0][Conversaton_Id] payload { id: covid, name: chat_name, } requests.post(url, jsonpayload) return covid2记忆检索 , history compress-- store user question assitant(system reply) -- compress store减少上下文容量减少token使用减少理解偏差# ask question, get history def chat(prompt): url API_URL[answer_new] question prompt.strip() chat_history [] passthrough { Time: time.ctime(), sysprompt: 以中文回复以下问题, # 分析以下问题如问题不明确则列出不明确之处如问题明确则输出结果 } payload { question: f{passthrough[sysprompt]}{question }, history: chat_history, conversation_id: 6a39310ac2149c3dbc243a04, ## prompt_id: , chunks: 2, retriever: , ## api_key: string, ## agent_id: string, active_docs: , isNoneDoc: True, save_conversation: True, ## visibility: hidden, model_id: docsgpt-local, passthrough: passthrough, temperature: 0.0, top_k: 5, } chat_history.append( {role: user, content: question} ) # call AI Answer response requests.post(url, jsonpayload) if response.status_code 200: result response.json() # add question reply into history chat_history.append({role: assistant, content: result[answer]}) return result[answer] else: return f{response.status_code}, Error # compress conversation history, keep context def compress(chat_history : list): message_json json.dumps(chat_history, ensure_asciiFalse) ## if len(message_json) 10000: ## return messages prompt f压缩以下对话历史保留核心信息和关键事实去除冗余不能超过100个字符\n{message_json} result chat(prompt) return result # loop conversation, build basic agent construction def chat_loop(): url API_URL[answer_new] while True: # while loop, different for chat() question input(\nPlease input your question).strip() chat_history [] passthrough { Time: time.ctime(), sysprompt: 以中文回复以下问题, # 分析以下问题如问题不明确则列出不明确之处如问题明确则输出结果 } payload { question: f{passthrough[sysprompt]}{question }, history: chat_history, conversation_id: 6a39310ac2149c3dbc243a04, ## prompt_id: , chunks: 2, retriever: , ## api_key: string, ## agent_id: string, active_docs: , isNoneDoc: True, save_conversation: True, ## visibility: hidden, model_id: docsgpt-local, passthrough: passthrough, temperature: 0.0, top_k: 5, } chat_history.append( {role: user, content: question} ) # quit conversation ## if user_input /quit: ## print(End Agent ) ## break # call AI Answer response requests.post(url, jsonpayload) if response.status_code 200: result response.json() # add question reply into history chat_history.append({role: assistant, content: result[answer]}) return result[answer] else: return f{response.status_code}, Error3决策生成 , think select tool- 生成tool -- 按格式生成--- name: read-json-file description: | 读取json文件时使用 tags read, json 适用json文件读取 license: rz01 metadata: author: roy zhu version: 0.1 --- ## 技能概述 读取json格式文件时使用。例如 - 读取json文件 - 提取json文件内容 ## 执行步骤 1. 打开json文件 2. 读取json文件 3. 分析json文件内容 4. 关闭json文件 ## 注意事项 - 读取异常给出提示 ## Examples- 选择/执行tool -- 路由参考 (4 封私信 / 30 条消息) 第六章手搓 Skill 系统 —— 能力模块化与编排 - 知乎 或 LLM大模型源码# 文件目录 │ skills-map.json # skill map list │ └─read-json-file # skill: read-json-file │ changelog.md │ metadata.json │ readme.md │ SKILL.md # core for skill description │ ├─assets ├─examples │ skills.md │ ├─references ├─scripts │ read_json_file.py │ └─tests 1) SKILL.md -- read-json-file 2) skills-map.json { read-json-file: read json file读取json文件 } 3) python: read json file def read_json_file(file_name:str) - str: 读json文件 try: with open(file_name, r, encodingutf-8) as f: data json.load(f) return data ## return f.read() except Exception as e: return ffail{str(e)} 4-1) tool(skill) route: get and select skill -- 此处仅为模拟方式通过skill关键字与prompt及answer的包含关系确定skill的选择 def get_skills(): skills read_json_file(./skills/skills-map.json) def get_skill_name(): return list(skills.keys) def get_skill_values()-list: return list(skills.values) return skills 4-1) 选中skill读入skill.md内容执行选中skill操作 def sel_skill(query): for skill in get_skills(): if skill in query or get_skills()[skill] in query or query in skill or query in get_skills()[skill]: return read_md_file(f./skills/{skill}/skill.md) else: return cannot get skill.4反馈学习, chat loop1) 循环对话 - 使用while循环当出现特定指令如 /quit 时通出 - 使用LLM工具所提供的函数调用指定的 chat(conversation) ID持续对话 2) 压缩上下文存入 system prompt / user prompt / assisttan promt chat_history [] chat_history.append( {role: system, content: sysprmpt} ) chat_history.append( {role: user, content: question} ) chat_history.append( {role: assistand, content: answer} ) def compress(chat_history : list): message_json json.dumps(chat_history, ensure_asciiFalse) ## if len(message_json) 10000: ## return messages prompt f压缩以下对话历史保留核心信息和关键事实去除冗余不能超过100个字符\n{message_json} result chat(prompt) # get chat reply: chat_history return resultDocsGPT Agent- 最简单省事的方式使用大模型工具提供的agent 和 skill参考AIGC生成式AI试用 52 -- 个人知识库 DocsGpt(chat参数)-CSDN博客DocsGPT APISkills 目录结构 | 菜鸟教程(4 封私信 / 30 条消息) 第六章手搓 Skill 系统 —— 能力模块化与编排 - 知乎