Skip to content

Commit eb35f54

Browse files
authored
docs: supplement and improve the docs (#40)
Co-authored-by: wuqingfu.528 <[email protected]>
1 parent 585b7d2 commit eb35f54

File tree

13 files changed

+574
-177
lines changed

13 files changed

+574
-177
lines changed

docs/docs/.vuepress/config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export default defineUserConfig({
1313

1414
navbar: ['/', '/introduction'],
1515

16-
sidebar: ['introduction', 'installation', 'get-started', 'agent', 'memory', 'knowledgebase', 'tracing', 'evaluation', 'deploy', 'cli', 'veadk-studio']
16+
sidebar: ['introduction', 'installation', 'get-started', 'agent', 'memory', 'tool', 'knowledgebase', 'tracing', 'evaluation', 'deploy', 'cli', 'veadk-studio']
1717
}),
1818

1919
bundler: viteBundler(),
156 KB
Loading
302 KB
Loading
532 KB
Loading

docs/docs/agent.md

Lines changed: 78 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,59 @@
11
# 智能体
22

3+
智能体 Agent 是一个具备完整功能的执行单元,依托内置的大模型推理能力,其不仅可以独立完成各类任务、与用户进行智能交互、调用外部工具资源,还能实现与其他 Agent 之间的协同配合。
4+
35
## 属性
46

5-
Agent中主要包括如下属性
7+
Agent 中主要包括如下属性
68

79
| 属性 | 类型 | 说明 |
810
| --- | --- | --- |
9-
| name | str | Agent的名称,即标识符 |
10-
| description | str | Agent的描述,后续会被构建为系统提示词的一部分;也被用来在A2A协议中进行Agent挑选 |
11-
| instruction | str | Agent中内置模型的系统提示词 |
12-
| tools | list | Function call中的工具列表,既可以是本地工具,也可以是MCP工具 |
13-
| sub_agents | list | 子Agent列表,用于多Agent之间交互 |
14-
| long_term_memory | Vector database | 长期记忆,后端通常为一个向量数据库(Vector database),能够检索 |
15-
| knowledgebase | Vector database | 知识库,后端通常为一个向量数据库(Vector database),能够检索 |
16-
| tracers | list | 追踪器列表,能够定义不同的追踪方式,并在Agent执行完毕后对整体Tracing信息保存至本地 |
11+
| name | str | Agent 的名称,即标识符 |
12+
| description | str | Agent 的描述,后续会被构建为系统提示词的一部分,也被用来在A2A协议中进行 Agent 挑选 |
13+
| instruction | str | Agent 中内置模型的系统提示词 |
14+
| model_name | str | Agent 中内置模型的名称,默认从环境变量中获取 |
15+
| model_provider | str | Agent 中内置模型的提供商,默认从环境变量中获取 |
16+
| model_api_base | str | Agent 中内置模型的 API Base,默认从环境变量中获取 |
17+
| model_api_key | str | Agent 中内置模型的 API Key,默认从环境变量中获取 |
18+
| tools | list | Function call 中的工具列表,既可以是本地工具,也可以是 MCP 工具 |
19+
| sub_agents | list | 子 Agent 列表,用于多 Agent 之间交互 |
20+
| knowledgebase | KnowledgeBase | 知识库,后端支持本地内存(local)和数据库(opensearch、viking、redis、mysql),通常设置为一个能够检索的向量数据库 |
21+
| long_term_memory | LongTermMemory | 长期记忆,后端支持本地内存(local)和数据库(opensearch、viking、redis、mysql),通常设置为一个能够检索的向量数据库 |
22+
| tracers | list | 追踪器列表,能够定义不同的追踪方式,并在 Agent 执行完毕后将整体 Tracing 信息保存至本地 |
23+
| serve_url | str | Agent 服务主机的 URL,将显示在 Agent Card 中 |
24+
25+
## 运行
26+
27+
在生产环境中,我们推荐您使用 VeADK 的`Runner`执行器来进行多租户服务与 Agent 运行,在多租场景下,`Runner`通过三个属性来确定资源空间:
28+
29+
- `app_name`:应用名称
30+
- `user_id`:用户ID
31+
- `session_id`:某个用户某次会话的ID
32+
33+
```python
34+
from veadk import Agent, Runner
35+
from veadk.memory.short_term_memory import ShortTermMemory
36+
37+
# Define Runner config
38+
APP_NAME = "..."
39+
USER_ID = "..."
40+
SESSION_ID = "..."
41+
42+
agent = Agent()
43+
44+
runner = Runner(
45+
agent=agent,
46+
short_term_memory=ShortTermMemory(),
47+
app_name=APP_NAME,
48+
user_id=USER_ID
49+
)
50+
51+
response = await runner.run(messages="...", session_id=SESSION_ID)
52+
```
1753

18-
## A2A智能体
54+
## A2A 智能体
1955

20-
当你的智能体部署到云上后,可以在本地被初始化为一个Remote Agent,也就是能够通过A2A协议来访问的智能体,初始化方法如下:
56+
当智能体部署到云上后,可以在本地被初始化为一个 Remote Agent,也就是能够通过 A2A 协议来访问的智能体,初始化方法如下:
2157

2258
```python
2359
remote_agent = RemoteVeAgent(
@@ -29,33 +65,50 @@ short_term_memory = ShortTermMemory()
2965
runner = Runner(
3066
agent=remote_agent,
3167
short_term_memory=short_term_memory
32-
)
68+
)
3369

3470
res = await runner.run(
3571
messages="...",
3672
session_id="sample_session"
37-
)
73+
)
3874
```
3975

40-
## 运行
76+
## 多智能体
77+
78+
使用 VeADK 可以构建多 Agent 协作, 主 Agent 通过 `sub_agents` 机制协调多个子 Agent 完成复杂任务。以下代码示例分别定义了三个 Agent:
79+
80+
- weather_reporter:负责获取指定城市的天气信息(调用了 `get_city_weather` 工具)。
81+
- suggester:根据天气情况给出穿衣建议。
82+
- planner_agent:作为“调度员”,先调用 `weather_reporter` 获取天气,再调用 `suggester` 获取建议,最后将结果整合返回给用户。
4183

42-
在生产环境中,我们推荐您使用`Runner`来进行多租户服务:
84+
该多智能体协作能更好的满足用户的需求。
4385

4486
```python
4587
from veadk import Agent, Runner
4688
from veadk.memory.short_term_memory import ShortTermMemory
89+
from veadk.tools.demo_tools import get_city_weather
4790

48-
# Define runner config
49-
APP_NAME = ""
50-
USER_ID = ""
51-
SESSION_ID = ""
91+
session_id = "..."
92+
prompt = "..."
5293

53-
agent = Agent()
94+
# define three agents, one for planner, two for write poem and polish
95+
weather_reporter = Agent(
96+
name="weather_reporter",
97+
description="A weather reporter agent to report the weather.",
98+
tools=[get_city_weather],
99+
)
100+
suggester = Agent(
101+
name="suggester",
102+
description="A suggester agent that can give some clothing suggestions according to a city's weather.",
103+
)
54104

55-
runner = Runner(
56-
agent=agent,
57-
short_term_memory=ShortTermMemory()
58-
)
105+
planner_agent = Agent(
106+
name="planner",
107+
description="A planner that can generate a suggestion according to a city's weather.",
108+
instruction="Invoke weather reporter agent first to get the weather, then invoke suggester agent to get the suggestion. Return the final response to user.",
109+
sub_agents=[weather_reporter, suggester],
110+
)
59111

112+
runner = Runner(agent=planner_agent, short_term_memory=ShortTermMemory())
60113
response = await runner.run(messages=prompt, session_id=session_id)
61-
```
114+
```

docs/docs/evaluation.md

Lines changed: 110 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,157 @@
11
# 评测
22

3-
VeADK构建一套完整的自动化Evaluation流程,主要能力包括
3+
VeADK 构建一套完整的自动化评测(Evaluation)流程,其主要功能包括
44

5-
- 运行时数据采集:通过collect_runtime_data开启
6-
- 测试集文件生成:开启后自动dump到本地
7-
- 评测:通过不同的evaluator或adk eval命令进行测试
8-
- 反馈优化:自动根据评测结果(score reason等属性)优化prompts
5+
- 运行时数据采集:自动捕获 Agent 的运行时数据
6+
- 测试集文件生成:Agent 运行后自动将运行时数据作为测试数据集(Eval Set)导出到本地
7+
- 评测:通过多种评测器(Evaluator)进行评测
8+
- 反馈优化:根据评测结果(如评测得分,原因分析等)自动优化 prompts
99

1010
## 运行时数据采集
1111

12+
VeADK 可以通过两种方式采集 Agent 的运行时数据。
13+
14+
对于 `agent.run()` 方法,在调用时设置 `collect_runtime_data=True` 即可开启数据采集。运行结束后,运行时数据构成的评测集文件将保存在 `agent._dump_path` 指定的路径。
15+
16+
```python
17+
await agent.run(
18+
prompt,
19+
collect_runtime_data=True,
20+
eval_set_id=f"eval_demo_set_{get_current_time()}",
21+
)
22+
# get expect output
23+
dump_path = agent._dump_path
24+
assert dump_path != "", "Dump eval set file failed! Please check runtime logs."
25+
```
26+
27+
对于 `Runner` 执行器,在 Agent 运行结束后,通过调用 `runner.save_eval_set()` 将运行时数据构成的评测集文件保存在默认路径。
28+
1229
```python
13-
from veadk.evaluation import EvalSetRecorder
30+
runner = Runner(
31+
agent=agent,
32+
short_term_memory=ShortTermMemory(),
33+
)
1434

15-
# 在希望进行数据dump处初始化一个EvalSetRecorder
16-
eval_set_recorder = EvalSetRecorder(session_service, eval_set_id)
35+
await runner.run(messages=prompts, session_id=session_id)
1736

18-
# dump数据,为Json格式
19-
dump_path = await eval_set_recorder.dump(app_name, user_id, session_id)
37+
dump_path = await runner.save_eval_set(session_id=session_id)
38+
assert dump_path != "", "Dump eval set file failed! Please check runtime logs."
2039
```
2140

2241
## 评测集文件
2342

24-
评测集文件格式兼容Google Evaluation,详见[评测集文件格式](https://google.github.io/adk-docs/evaluate/#how-evaluation-works-with-the-adk)
43+
评测集文件格式兼容 Google Evaluation 标准,详见[评测集文件格式](https://google.github.io/adk-docs/evaluate/#how-evaluation-works-with-the-adk)。评测集本地保存过程中,会考虑所有会话
2544

26-
评测集本地保存过程中,均考虑当前会话。下面是一些概念对齐
45+
文件结构说明
2746

28-
- `test_case`:所有对话轮次
29-
- `invocation`:一轮对话
47+
- `eval_cases`:所有对话轮次
48+
- `conversation`:一轮对话
49+
- `user_content`:用户的输入
50+
- `final_response`:Agent 的最后输出
51+
- `intermediate_data`:中间数据
52+
- `tool_uses`:Agent 使用的工具
53+
- `intermediate_responses`:Agent 的中间会话
3054

31-
## 评测器
55+
## 评测
3256

33-
当前VeADK支持Deepeval评测器,通过如下方式定义
57+
VeADK 目前支持 [DeepEval](https://deepeval.com/) 评测器和 [ADKEval](https://google.github.io/adk-docs/evaluate/),通过如下方式定义评测器
3458

3559
```python
3660
from veadk.evaluation.deepeval_evaluator import DeepevalEvaluator
61+
from veadk.evaluation.adk_evaluator.adk_evaluator import ADKEvaluator
3762

3863
# 当然,你还可以传入`judge_model`等相关信息
3964
evaluator = DeepevalEvaluator()
40-
```
4165

42-
## 评测方法
66+
# Alternatively:
67+
# evaluator = ADKEvaluator()
68+
```
4369

4470
启动标准的评测接口:
4571

4672
```python
4773
await evaluator.eval(eval_set_file_path=dump_path, metrics=metrics)
4874
```
4975

50-
其中,输入
76+
参数说明
5177

5278
- `eval_set_file_path`:评测集文件路径
53-
- `metrics`:评测指标
54-
55-
不同的评测指标在不同测试框架中可能不同。
79+
- `metrics`:评测指标,不同的评测指标在不同测试框架中可能不同。
5680

5781
## 数据上报
5882

59-
评测结果可以自动上报至火山引擎的VMP平台,只需要在定义评估器的时候传入Prometheus pushgateway的相关参数
83+
评测结果可以自动上报至火山引擎的 [VMP](https://console.volcengine.com/prometheus) 平台,只需要在定义评估器的时候传入 Prometheus pushgateway 等相关参数即可,可在 `config.yaml` 中进行配置并从环境变量中自动读取
6084

6185
```python
6286
from veadk.evaluation.utils.prometheus import PrometheusPushgatewayConfig
6387

64-
# 可以自动从环境变量中读取相关配置
88+
# Load Prometheus configuration (can be read from environment variables)
6589
prometheus_config = PrometheusPushgatewayConfig()
6690

67-
# 传入到评估器中
91+
# Pass config into evaluator
6892
evaluator = DeepevalEvaluator(
6993
...,
7094
prometheus_config=prometheus_config,
7195
)
96+
```
97+
98+
## 完整示例
99+
100+
以下是使用 DeepEval 评测器的完整例子。其中定义了 [GEval](https://deepeval.com/docs/metrics-llm-evals) 指标和 [ToolCorrectnessMetric](https://deepeval.com/docs/metrics-tool-correctness) 指标,分别用于整体输出质量评估和工具调用正确率评估,并将评测结果上报至火山引擎的 VMP 平台:
101+
102+
```python
103+
import asyncio
104+
import os
105+
from builtin_tools.agent import agent
106+
107+
from deepeval.metrics import GEval, ToolCorrectnessMetric
108+
from deepeval.test_case import LLMTestCaseParams
109+
from veadk.config import getenv
110+
from veadk.evaluation.deepeval_evaluator import DeepevalEvaluator
111+
from veadk.evaluation.utils.prometheus import PrometheusPushgatewayConfig
112+
from veadk.prompts.prompt_evaluator import eval_principle_prompt
113+
114+
prometheus_config = PrometheusPushgatewayConfig()
115+
116+
# 1. Rollout, and generate eval set file
117+
# await agent.run(
118+
# prompt,
119+
# collect_runtime_data=True,
120+
# eval_set_id=f"eval_demo_set_{get_current_time()}",
121+
# )
122+
# # get expect output
123+
# dump_path = agent._dump_path
124+
# assert dump_path != "", "Dump eval set file failed! Please check runtime logs."
125+
126+
# 2. Evaluate in terms of eval set file
127+
evaluator = DeepevalEvaluator(
128+
agent=agent,
129+
judge_model_name=getenv("MODEL_JUDGE_NAME"),
130+
judge_model_api_base=getenv("MODEL_JUDGE_API_BASE"),
131+
judge_model_api_key=getenv("MODEL_JUDGE_API_KEY"),
132+
prometheus_config=prometheus_config,
133+
)
134+
135+
# 3. Define evaluation metrics
136+
metrics = [
137+
GEval(
138+
threshold=0.8,
139+
name="Base Evaluation",
140+
criteria=eval_principle_prompt,
141+
evaluation_params=[
142+
LLMTestCaseParams.INPUT,
143+
LLMTestCaseParams.ACTUAL_OUTPUT,
144+
LLMTestCaseParams.EXPECTED_OUTPUT,
145+
],
146+
),
147+
ToolCorrectnessMetric(
148+
threshold=0.5
149+
),
150+
]
151+
152+
# 4. Run evaluation
153+
eval_set_file_path = os.path.join(
154+
os.path.dirname(__file__), "builtin_tools", "evalsetf0aef1.evalset.json"
155+
)
156+
await evaluator.eval(eval_set_file_path=eval_set_file_path, metrics=metrics)
72157
```

0 commit comments

Comments
 (0)