Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
LAE
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
文靖昊
LAE
Commits
7e395564
Commit
7e395564
authored
Nov 15, 2024
by
tinywell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
日志,时间记录
parent
da717251
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
49 additions
and
14 deletions
+49
-14
tool_monitor.py
src/agent/tool_monitor.py
+1
-0
tool_rate.py
src/agent/tool_rate.py
+1
-0
classify.py
src/server/classify.py
+10
-3
rewrite.py
src/server/rewrite.py
+5
-3
tool_picker.py
src/server/tool_picker.py
+32
-8
No files found.
src/agent/tool_monitor.py
View file @
7e395564
import
logging
from
typing
import
Dict
,
Any
,
Optional
,
List
from
typing
import
Dict
,
Any
,
Optional
,
List
from
pydantic
import
BaseModel
,
Field
from
pydantic
import
BaseModel
,
Field
from
langchain_core.tools
import
BaseTool
from
langchain_core.tools
import
BaseTool
...
...
src/agent/tool_rate.py
View file @
7e395564
import
time
import
time
import
logging
from
typing
import
Dict
,
List
,
Tuple
,
Any
,
Optional
from
typing
import
Dict
,
List
,
Tuple
,
Any
,
Optional
from
pydantic
import
BaseModel
,
Field
from
pydantic
import
BaseModel
,
Field
from
typing
import
Type
from
typing
import
Type
...
...
src/server/classify.py
View file @
7e395564
...
@@ -2,7 +2,7 @@ from pydantic import BaseModel,Field
...
@@ -2,7 +2,7 @@ from pydantic import BaseModel,Field
from
typing
import
Literal
from
typing
import
Literal
from
langchain_core.prompts
import
PromptTemplate
from
langchain_core.prompts
import
PromptTemplate
from
langchain_core.output_parsers
import
PydanticOutputParser
from
langchain_core.output_parsers
import
PydanticOutputParser
from
..utils.logger
import
get_logger
class
RouterQuery
(
BaseModel
):
class
RouterQuery
(
BaseModel
):
"""Route a user query to the most relevant datasource."""
"""Route a user query to the most relevant datasource."""
...
@@ -43,9 +43,16 @@ class RouterLLM:
...
@@ -43,9 +43,16 @@ class RouterLLM:
partial_variables
=
{
"format_instructions"
:
parser
.
get_format_instructions
()},
partial_variables
=
{
"format_instructions"
:
parser
.
get_format_instructions
()},
)
)
self
.
router
=
prompt
|
llm
|
parser
self
.
router
=
prompt
|
llm
|
parser
self
.
logger
=
get_logger
(
self
.
__class__
.
__name__
)
def
invoke
(
self
,
question
):
def
invoke
(
self
,
question
):
return
self
.
router
.
invoke
({
"query"
:
question
})
self
.
logger
.
info
(
f
"路由用户查询: {question}"
)
try
:
result
=
self
.
router
.
invoke
({
"query"
:
question
})
self
.
logger
.
info
(
f
"路由用户查询结果: {result}"
)
return
result
except
Exception
as
e
:
self
.
logger
.
error
(
f
"路由用户查询失败: {e}"
,
exc_info
=
True
)
return
{
'datasource'
:
'none'
}
def
new_router_llm
(
llm
):
def
new_router_llm
(
llm
):
...
...
src/server/rewrite.py
View file @
7e395564
...
@@ -84,7 +84,7 @@ from pydantic import BaseModel,Field
...
@@ -84,7 +84,7 @@ from pydantic import BaseModel,Field
from
langchain_core.prompts
import
PromptTemplate
from
langchain_core.prompts
import
PromptTemplate
from
langchain_core.output_parsers
import
PydanticOutputParser
from
langchain_core.output_parsers
import
PydanticOutputParser
import
re
import
re
from
..utils.logger
import
get_logger
class
ReWriterModel
(
BaseModel
):
class
ReWriterModel
(
BaseModel
):
rewriter
:
str
=
Field
(
rewriter
:
str
=
Field
(
...
@@ -102,10 +102,11 @@ class ReWriteLLM:
...
@@ -102,10 +102,11 @@ class ReWriteLLM:
)
)
self
.
router
=
prompt
|
llm
self
.
router
=
prompt
|
llm
self
.
parser
=
parser
self
.
parser
=
parser
self
.
logger
=
get_logger
(
self
.
__class__
.
__name__
)
def
invoke
(
self
,
question
,
history
):
def
invoke
(
self
,
question
,
history
):
response
=
self
.
router
.
invoke
({
"query"
:
question
,
"histories"
:
history
}
)
self
.
logger
.
info
(
f
"重写用户查询: {question}"
)
try
:
try
:
response
=
self
.
router
.
invoke
({
"query"
:
question
,
"histories"
:
history
})
result
=
self
.
parser
.
invoke
(
response
)
result
=
self
.
parser
.
invoke
(
response
)
except
:
except
:
# 定义正则表达式模式
# 定义正则表达式模式
...
@@ -119,6 +120,7 @@ class ReWriteLLM:
...
@@ -119,6 +120,7 @@ class ReWriteLLM:
return
match
[
1
]
.
strip
()
return
match
[
1
]
.
strip
()
return
response
.
content
return
response
.
content
self
.
logger
.
info
(
f
"重写后的问题: {result.rewriter}"
)
return
result
.
rewriter
return
result
.
rewriter
def
extend_history
(
self
,
history
):
def
extend_history
(
self
,
history
):
...
...
src/server/tool_picker.py
View file @
7e395564
from
typing
import
List
,
Dict
from
typing
import
List
,
Dict
from
datetime
import
datetime
from
datetime
import
datetime
import
time
from
langchain_core.prompts
import
PromptTemplate
,
ChatPromptTemplate
,
SystemMessagePromptTemplate
,
MessagesPlaceholder
,
HumanMessagePromptTemplate
from
langchain_core.prompts
import
PromptTemplate
,
ChatPromptTemplate
,
SystemMessagePromptTemplate
,
MessagesPlaceholder
,
HumanMessagePromptTemplate
from
langchain.tools.render
import
render_text_description_and_args
from
langchain.tools.render
import
render_text_description_and_args
...
@@ -91,33 +92,56 @@ class ToolRunner:
...
@@ -91,33 +92,56 @@ class ToolRunner:
self
.
chain
=
prompt
|
self
.
llm
self
.
chain
=
prompt
|
self
.
llm
def
run
(
self
,
input
:
str
,
tool_name
:
str
,
params
:
Dict
):
def
run
(
self
,
input
:
str
,
tool_name
:
str
,
params
:
Dict
):
self
.
logger
.
info
(
f
"Running tool '{tool_name}' with params: {params}"
)
start_time
=
time
.
time
()
self
.
logger
.
info
(
f
"开始执行工具 '{tool_name}',参数: {params}"
)
if
tool_name
not
in
self
.
tools
:
if
tool_name
not
in
self
.
tools
:
self
.
logger
.
error
(
f
"
Tool {tool_name} not found
"
)
self
.
logger
.
error
(
f
"
工具 {tool_name} 未找到
"
)
raise
ValueError
(
f
"Tool {tool_name} not found"
)
raise
ValueError
(
f
"Tool {tool_name} not found"
)
try
:
try
:
# 工具执行
tool_start
=
time
.
time
()
tool
=
self
.
tools
[
tool_name
]
tool
=
self
.
tools
[
tool_name
]
self
.
logger
.
info
(
f
"
Invoking tool
{tool_name}"
)
self
.
logger
.
info
(
f
"
调用工具
{tool_name}"
)
result
=
tool
.
invoke
(
params
)
result
=
tool
.
invoke
(
params
)
self
.
logger
.
debug
(
f
"Tool result: {result}"
)
tool_time
=
time
.
time
()
-
tool_start
self
.
logger
.
info
(
f
"工具执行完成,耗时: {tool_time:.2f}秒"
)
self
.
logger
.
debug
(
f
"工具执行结果: {result}"
)
# 提取 markdown 表格
table
=
""
table
=
""
if
"markdown"
in
result
:
if
"markdown"
in
result
:
table
=
result
[
"markdown"
]
table
=
result
[
"markdown"
]
del
result
[
"markdown"
]
del
result
[
"markdown"
]
self
.
logger
.
info
(
"Getting LLM interpretation"
)
# LLM 解释结果
llm_start
=
time
.
time
()
self
.
logger
.
info
(
"开始 LLM 结果解释"
)
llm_result
=
self
.
chain
.
invoke
({
"input"
:
input
,
"result"
:
result
})
llm_result
=
self
.
chain
.
invoke
({
"input"
:
input
,
"result"
:
result
})
llm_time
=
time
.
time
()
-
llm_start
self
.
logger
.
info
(
f
"LLM 解释完成,耗时: {llm_time:.2f}秒"
)
# 组装响应
response
=
{
response
=
{
"output"
:
llm_result
.
content
,
"output"
:
llm_result
.
content
,
"table"
:
table
"table"
:
table
}
}
self
.
logger
.
info
(
"Tool execution completed successfully"
)
total_time
=
time
.
time
()
-
start_time
self
.
logger
.
info
(
f
"工具执行完成,总耗时: {total_time:.2f}秒,其中工具执行: {tool_time:.2f}秒,LLM解释: {llm_time:.2f}秒"
)
# 记录性能指标
self
.
logger
.
info
(
"性能指标 - "
f
"总耗时: {total_time:.2f}秒, "
f
"工具执行: {tool_time:.2f}秒 ({(tool_time/total_time)*100:.1f}
%
), "
f
"LLM解释: {llm_time:.2f}秒 ({(llm_time/total_time)*100:.1f}
%
)"
)
return
response
return
response
except
Exception
as
e
:
except
Exception
as
e
:
self
.
logger
.
error
(
f
"Error running tool: {str(e)}"
)
error_time
=
time
.
time
()
-
start_time
self
.
logger
.
error
(
f
"工具执行失败,耗时: {error_time:.2f}秒,错误: {str(e)}"
,
exc_info
=
True
)
raise
raise
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment