KAG/kag/solver/prompt/expression_builder.py
royzhao e1012d39e4
feat(solver): support kag thinker (#640)
* feat(kag): update to v0.7 (#456)

* add think cost

* update csv scanner

* add final rerank

* add reasoner

* add iterative planner

* fix dpr search

* fix dpr search

* add reference data

* move odps import

* update requirement.txt

* update 2wiki

* add missing file

* fix markdown reader

* add iterative planning

* update version

* update runner

* update 2wiki example

* update bridge

* merge solver and solver_new

* add cur day

* writer delete

* update multi process

* add missing files

* fix report

* add chunk retrieved executor

* update try in stream runner result

* add path

* add math executor

* update hotpotqa example

* remove log

* fix python coder solver

* update hotpotqa example

* fix python coder solver

* update config

* fix bad

* add log

* remove unused code

* commit with task thought

* move kag model to common

* add default chat llm

* fix

* use static planner

* support chunk graph node

* add args

* support naive rag

* llm client support tool calls

* add default async

* add openai

* fix result

* fix markdown reader

* fix thinker

* update asyncio interface

* feat(solver): add mcp support (#444)

* 上传mcp client相关代码

* 1、完成一套mcp client的调用,从pipeline到planner、executor
2、允许json中传入多个mcp_server,通过大模型进行调用并选择
3、调通baidu_map_mcp的使用

* 1、schema

* bugfix:删减冗余代码

---------

Co-authored-by: wanxingyu.wxy <wanxingyu.wxy@antgroup.com>

* fix affairqa after solver refactor

* fix affairqa after solver refactor

* fix readme

* add params

* update version

* update mcp executor

* update mcp executor

* solver add mcp executor

* add missing file

* add mpc executor

* add executor

* x

* update

* fix requirement

* fix main llm config

* fix solver

* bugfix:修复invoke函数调用逻辑

* chg eva

* update example

* add kag layer

* add step task

* support dot refresh

* support dot refresh

* support dot refresh

* support dot refresh

* add retrieved num

* add retrieved num

* add pipelineconf

* update ppr

* update musique prompts

* update

* add to_dict for BuilderComponentData

* async build

* add deduce prompt

* add deduce prompt

* add deduce prompt

* fix reader

* add deduce prompt

* add page thinker report

* modify prmpt

* add step status

* add self cognition

* add self cognition

* add memory graph storage

* add now time

* update memory config

* add now time

* chg graph loader

* 添加prqa数据集和代码

* bugfix:prqa调用逻辑修复

* optimize:优化代码逻辑,生成答案规范化

* add retry py code

* update memory graph

* update memory graph

* fix

* fix ner

* add with_out_refer generator prompt

* fix

* close ckpt

* fix query

* fix query

* update version

* add llm checker

* add llm checker

* 1、上传evalutor.py以及修改gold_answer.json格式
2、优化代码逻辑
3、修改README.md文件

* update exp

* update exp

* rerank support

* add static rewrite query

* recall more chunks

* fix graph load

* add static rewrite query

* fix bugs

* add finish check

* add finish check

* add finish check

* add finish check

* 1、上传evalutor.py的结果
2、优化代码逻辑,优化readme文件

* add lf retry

* add memory graph api

* fix reader api

* add ner

* add metrics

* fix bug

* remove ner

* add reraise fo retry

* add edge prop to memory graph

* add memory graph

* 1、评测数据集结果修正
2、优化evaluator.py代码
3、删除结果不存在而gold_answer中有答案的问题

* 删除评测结果文件

* fix knext host addr

* async eva

* add lf prompt

* add lf prompt

* add config

* add retry

* add unknown check

* add rc result

* add rc result

* add rc result

* add rc result

* 依据kag pipeline格式修改代码逻辑并通过测试

* bugfix:删除冗余代码

* fix report prompt

* bugfix:触发重试机制

* bugfix:中文符号错误

* fix rethinker prompt

* update version to 0.6.2b78

* update version

* 1、修改evaluator.py,通过大模型计算准确率,符合最新调用逻辑
2、修改prompt,让没有回答的结果重复测试

* update affairqa for evaluate

* update affairqa for evaluate

* bugfix:修正数据集

* bugfix:修正数据集

* bugfix:修正数据集

* fix name conflict

* bugfix:删除错误问题

* bugfix:文件名命名错误导致evaluator失败

* update for affairqa eval

* bugfix:修改代码保持evaluate逻辑一致

* x

* update for affairqa readme

* remove temp eval scripts

* bugfix for math deduce

* merge 0.6.2_dev

* merge 0.6.2_dev

* fix

* update client addr

* updated version

* update for affairqa eval

* evaUtils 支持中文

* fix affairqa eval:

* remove unused example

* update kag config

* fix default value

* update readme

* fix init

* 注释信息修改,并添加部分class说明

* update example config

* Tc 0.7.0 (#459)

* 提交affairQA 代码

* fix affairqa eval

---------

Co-authored-by: zhengke.gzk <zhengke.gzk@antgroup.com>

* fix all examples

* reformat

---------

Co-authored-by: peilong <peilong.zpl@antgroup.com>
Co-authored-by: 锦呈 <zhangxinhong.zxh@antgroup.com>
Co-authored-by: wanxingyu.wxy <wanxingyu.wxy@antgroup.com>
Co-authored-by: zhengke.gzk <zhengke.gzk@antgroup.com>

* update chunk metadata

* update chunk metadata

* add debug reporter

* update table text

* add server

* fix math executor

* update api-key for openai vec

* update

* fix naive rag bug

* format code

* fix

---------

Co-authored-by: zhuzhongshu123 <152354526+zhuzhongshu123@users.noreply.github.com>
Co-authored-by: 锦呈 <zhangxinhong.zxh@antgroup.com>
Co-authored-by: wanxingyu.wxy <wanxingyu.wxy@antgroup.com>
Co-authored-by: zhengke.gzk <zhengke.gzk@antgroup.com>
2025-07-08 17:44:32 +08:00

179 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
from typing import List
from kag.common.utils import get_now
from kag.interface import PromptABC
logger = logging.getLogger(__name__)
@PromptABC.register("default_expression_builder")
class ExpressionBuildr(PromptABC):
template_zh = (
f"今天是{get_now(language='zh')}"
+ """
# instruction
根据给出的问题和数据编写python代码输出问题结果。
从context中提取的数据必须显式赋值所有计算步骤必须用代码实现不得隐含推断。
必须输出中间计算过程和结果格式为print语句。
如果context未提供必要数据或无法计算直接打印"I don't know."
# output format
严格输出以下结构的python代码版本3.10
1. 数据提取部分代码中涉及输入的数值需要从context及question中提取不允许进行假设
2. 计算过程:分步实现所有数学运算,每个步骤对应独立变量
3. 输出每个中间变量和最终结果必须用print语句输出
# examples
## 例子1
### input
#### question
4百万元按照日利率万分之1.5一共612天计算利息一共多少钱
#### context
日利率万分之1.5
### output
```python
# 初始本金(单位:百万)
principal = 4 # 单位:百万
# 日利率计算万分之1.5
daily_rate = 1.5 / 10000
# 计算周期
days = 612
# 单日利息计算
daily_interest = principal * daily_rate
# 累计利息计算
total_interest = daily_interest * days
# 总金额计算
total_amount = principal + total_interest
print(f"单日利息:{daily_interest:.2f}百万")
print(f"累计利息:{total_interest:.2f}百万")
print(f"总金额:{total_amount:.2f}百万")
```
## 例子2
### input
#### question
根据2018年和2019年游戏收入计算2019年游戏收入增长率再根据增长率计算2020年游戏收入
#### context
2018年游戏收入是1300万2019年游戏收入是1580万
### output
```python
# 2018年和2019年的游戏收入单位
revenue_2018 = 1300
revenue_2019 = 1580
# 计算2019年的收入增长率
growth_rate = (revenue_2019 - revenue_2018) / revenue_2018
print(f"2019年的收入增长率为: {growth_rate * 100:.2f}%")
# 根据增长率计算2020年的收入
revenue_2020 = revenue_2019 * (1 + growth_rate)
print(f"2020年的预计收入为: {revenue_2020:.2f}")
```
## 例子3
### input
#### question
47000元按照612天计算利息本息一共多少钱
#### content
### output
```python
# 未给出利率,无法计算
print("未给出利率,无法计算")
```
# input
## question
$question
## context
$context
## error
$error
## output
"""
)
template_en = (
f"Today is {get_now(language='en')}\n"
+ """# instruction
Generate Python code based on the given question and context data to output the result.
Show extracted data from context, intermediate calculations and final results for clarity.
Strictly use input content without making assumptions (e.g., if disability grade isn't mentioned, assume no disability).
Return "I don't know." if question cannot be answered.
# output format
Output only Python 3.8 code without any additional information
# examples
## Example 1
### input
#### question
Calculate interest for 47,000元 at 0.015% daily rate over 612 days
### output
```python
# Initial principal
principal = 47000
# Daily rate (0.015‰)
rate = 1.5 / 10000
# Days
days = 612
# Calculate annual rate
annual_rate = rate * 365
# Calculate interest
interest = principal * (annual_rate / 365) * days
# Calculate total
total = principal + interest
print(f"Total amount: {total:.2f} yuan")
```
## Example 2
### input
#### question
Calculate 2019 game revenue growth rate and predict 2020 revenue based on 2018-2019 data
#### context
2018 game revenue: 13M, 2019 game revenue: 15.8M
### output
```python
# 2018-2019 revenue (million)
revenue_2018 = 1300
revenue_2019 = 1580
# Calculate growth rate
growth_rate = (revenue_2019 - revenue_2018) / revenue_2018
print(f"Growth rate: {growth_rate*100:.2f}%")
# Predict 2020 revenue
revenue_2020 = revenue_2019 * (1 + growth_rate)
print(f"2020 projected revenue: {revenue_2020:.2f} million")
```
# input
## question
$question
## context
$context
## error
$error
"""
)
@property
def template_variables(self) -> List[str]:
return ["question", "context", "error"]
def parse_response(self, response: str, **kwargs):
rsp = response
if isinstance(rsp, str):
rsp = rsp.strip().strip("```").strip("python")
return rsp