Commit 742a99a2 by tinywell

feat: Add country info tool to agent

parent 229a0e7f
...@@ -113,16 +113,16 @@ def complete_administrative_division(input_text, data): ...@@ -113,16 +113,16 @@ def complete_administrative_division(input_text, data):
for city in province['cities']: for city in province['cities']:
if input_text in city['name']: if input_text in city['name']:
return { return {
'province': province['province'], '': province['province'],
'city': city['name'], '': city['name'],
'counties': city['counties'] '县(区)': city['counties']
} }
for county in city['counties']: for county in city['counties']:
if input_text in county: if input_text in county:
return { return {
'province': province['province'], '': province['province'],
'city': city['name'], '': city['name'],
'county': county '县(区)': county
} }
return None return None
...@@ -132,9 +132,22 @@ class AdministrativeDivisionArgs(BaseModel): ...@@ -132,9 +132,22 @@ class AdministrativeDivisionArgs(BaseModel):
class AdministrativeDivision(BaseTool): class AdministrativeDivision(BaseTool):
name = "administrative_division" name = "administrative_division"
description = "根据输入补全行政区划信息,明确具体的省、市、县信息。" description = "根据输入补全行政区划信息,明确具体的省、市、县信息。比如输入县,补全所属省市,输入市则补全省级以及下辖所有县区"
args_schema: Type[BaseModel] = AdministrativeDivisionArgs args_schema: Type[BaseModel] = AdministrativeDivisionArgs
def _run(self, input_text: str) -> str: def _run(self, input_text: str) -> str:
result = complete_administrative_division(input_text, divisions) result = complete_administrative_division(input_text, divisions)
return result return result
\ No newline at end of file
class CountryInfoArgs(BaseModel):
country: str = Field(...,description="县(区)这个级别的行政区划名称")
# fake tool for testing
class CountryInfo(BaseTool):
name = "country_info"
description = "查询特定县(区)相关的地质情况"
args_schema: Type[BaseModel] = CountryInfoArgs
def _run(self, country: str) -> str:
return f"{country} 的地质情况是:xxxxxx"
\ No newline at end of file
...@@ -45,7 +45,7 @@ PROMPT_AGENT_HUMAN = """{input}\n\n{agent_scratchpad}\n (请注意,无论如 ...@@ -45,7 +45,7 @@ PROMPT_AGENT_HUMAN = """{input}\n\n{agent_scratchpad}\n (请注意,无论如
################################################################################################################## ##################################################################################################################
# 结合历史对话信息,对用户提问进行扩展,生成不同角度的多个提问。用于 RAG 场景中 # 结合历史对话信息,对用户提问进行扩展,生成不同角度的多个提问。用于 RAG 场景中
PROMPT_QUERY_EXTEND = """作为一个向量检索助手,你的任务是结合历史记录,从不同角度,为“原问题”生成三个不同版本的“检索词”,从而提高向量检索的语义丰富度,提高向量检索的精度。生成的问题要求指向对象清晰明确,并与“原问题语言相同”。例如: PROMPT_QUERY_EXTEND = """作为一个向量检索助手,你的任务是结合历史记录,从不同角度,为“原问题”生成三个不同版本的“检索词”,从而提高向量检索的语义丰富度,提高向量检索的精度。生成的问题要求指向对象清晰明确,并与“原问题语言相同”。如果问题中包含多个问询对象,可以将其拆分为多个问题。例如:
历史记录: 历史记录:
''' '''
''' '''
...@@ -67,7 +67,7 @@ A: 当前对话是关于 Nginx 的介绍和使用等。 ...@@ -67,7 +67,7 @@ A: 当前对话是关于 Nginx 的介绍和使用等。
Q: 报错 "no connection" Q: 报错 "no connection"
A: 报错"no connection"可能是因为…… A: 报错"no connection"可能是因为……
''' '''
原问题: 怎么解决 原问题: 这是什么原因要怎么解决
检索词: ["Nginx报错"no connection"如何解决?","造成'no connection'报错的原因。","Nginx提示'no connection',要怎么办?"] 检索词: ["Nginx报错"no connection"如何解决?","造成'no connection'报错的原因。","Nginx提示'no connection',要怎么办?"]
---------------- ----------------
历史记录: 历史记录:
...@@ -96,11 +96,9 @@ A: 关于 FatGPT 的介绍和使用等问题。 ...@@ -96,11 +96,9 @@ A: 关于 FatGPT 的介绍和使用等问题。
---------------- ----------------
历史记录: 历史记录:
''' '''
Q: FastGPT 如何收费?
A: FastGPT 收费可以参考……
''' '''
原问题: 你知道 laf 么 原问题: 北京和上海那个天气好
检索词: ["laf 的官网地址是多少?","laf 的使用教程。","laf 有什么特点和优势。"] 检索词: ["北京的天气情况如何","上海的天气情况如何","北京和上海的天气那个更舒适"]
---------------- ----------------
历史记录: 历史记录:
''' '''
......
...@@ -24,3 +24,6 @@ class Agent: ...@@ -24,3 +24,6 @@ class Agent:
# yield step # yield step
return self.agent_executor.invoke(input=prompt_args) return self.agent_executor.invoke(input=prompt_args)
def stream(self, prompt_args: dict = {}):
for step in self.agent_executor.stream(prompt_args):
yield step
\ No newline at end of file
...@@ -18,7 +18,7 @@ from pydantic import BaseModel, Field ...@@ -18,7 +18,7 @@ from pydantic import BaseModel, Field
from src.server.agent import Agent from src.server.agent import Agent
from src.config.prompts import PROMPT_AGENT_SYS, PROMPT_AGENT_HUMAN from src.config.prompts import PROMPT_AGENT_SYS, PROMPT_AGENT_HUMAN
from src.agent.tool_divisions import AdministrativeDivision from src.agent.tool_divisions import AdministrativeDivision, CountryInfo
class CalcInput(BaseModel): class CalcInput(BaseModel):
a: int = Field(...,description="第一个数") a: int = Field(...,description="第一个数")
...@@ -38,6 +38,7 @@ class Calc(BaseTool): ...@@ -38,6 +38,7 @@ class Calc(BaseTool):
tools = [AdministrativeDivision()] tools = [AdministrativeDivision()]
llm = ChatOpenAI( llm = ChatOpenAI(
...@@ -82,9 +83,9 @@ def test_add(): ...@@ -82,9 +83,9 @@ def test_add():
# print(step) # print(step)
def test_agent_division(): def test_agent_division():
tools = [AdministrativeDivision()] tools = [AdministrativeDivision(),CountryInfo()]
agent = Agent(llm=llm, tools=tools, prompt=prompt, verbose=True) agent = Agent(llm=llm, tools=tools, prompt=prompt, verbose=True)
res = agent.exec(prompt_args={"input": "介绍下陇南市武都区的基本情况"}) res = agent.exec(prompt_args={"input": "我想知道陇南市西和县和文县的降雨量谁的多"})
print(res) print(res)
if __name__ == "__main__": if __name__ == "__main__":
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment