Files
multi-agent-bidding/app/__pycache__/llm_client.cpython-310.pyc
T

197 lines
9.4 KiB
Plaintext
Raw Normal View History

2026-04-12 01:55:34 +08:00
o
àŠÚiƒ.ã@sLdZddlZddlZddlZddlmZmZmZmZGdddƒZ e ƒZ
dS)u#
LLM客户端 - 调用大模型API
éN)ÚDictÚListÚOptionalÚAnyc @seZdZdZ    d/dededed efd
d Z
d0deede dede
def
ddZ d1dededefddZ d1dedededefddZ
dedefdd „Zd!ededeefd"d#„Zd$ed%edefd&d'„Z d1d$ed(edefd)d*„Zd$ed+edefd,d-„Zd.S)2Ú LLMClientu大模型客户端úhttp://192.168.2.17:19007/v1ÚxxxxÚautoéxÚbase_urlÚapi_keyÚmodelÚtimeoutcCs"| d¡|_||_||_||_dS)/)Úrstripr r r
r)Úselfr r r
r©rúP/home/xian/.openclaw/workspace-coder/works/multi-agent-bidding/app/llm_client.pyÚ__init__s 
zLLMClient.__init__çffffffæ?émessagesÚ temperatureÚ
max_tokensÚstreamÚreturnc
C|jd}dd|jdœ}|j||||dœ}ztj||||j|d}|jdkr7dd |jd
|jd œWS|rd} | ¡D]L}
|
r|
  d ¡}
|
 
d
¡r|
dd} | dkrYn3z't   | ¡} d| vrt
| dƒdkr| dd di¡}
d|
vr| |
d7} Wq?t jYq?wq?d| iWS|  ¡} | dddd} |  di¡}| |dœWStjddd œYStj}zddt|ƒd œWYd}~Sd}~ww)uD
å‘é€èŠå¤©è¯·æ±‚
Args:
messages: [{"role": "user/assistant/system", "content": "..."}]
temperature: æ¸©åº¦å‚æ•°
max_tokens: 最大token数
stream: æ˜¯å¦æµå¼è¾“出
Returns:
{"content": "...", "usage": {...}}
z/chat/completionszapplication/jsonzBearer )z Content-TypeÚ
Authorization)r
rrrr)ÚheadersÚjsonrréÈÚu API错误: z - )ÚcontentÚerrorzutf-8zdata: éNz[DONE]ÚchoicesrÚdeltar!ÚmessageÚusage)r!r'u 请求超时u请求异常: )r r r
ÚrequestsÚpostrÚ status_codeÚtextÚ
iter_linesÚdecodeÚ
startswithrÚloadsÚlenÚgetÚJSONDecodeErrorÚTimeoutÚRequestExceptionÚstr)rrrrrÚurlrÚpayloadÚresponser!ÚlineÚdataÚchunkr%r'ÚerrrÚchatsn 
þûû
þ 

 
 ÿ
 þ ÿzLLMClient.chatr ÚpromptÚ
system_promptcCsVg}|r | d|dœ¡| d|dœ¡| |¡}d|vr'|dr't|dƒ|dS)
简å•èŠå¤©æŽ¥å£
Args:
prompt: 用户输入
system_prompt: 系统æç¤º
Returns:
æ¨¡åž‹å›žå¤æ–‡æœ¬
Úsystem©Úroler!Úuserr"r!)Úappendr=Ú Exception)rr>r?rÚresultrrrÚ simple_chatos 
 zLLMClient.simple_chatÚschemac Cstj|ddd}|d|}d|dœd|dœg}|j|dd }d
|vr-|d
r-t|d
ƒ|d  ¡}z%| d ¡rS| d
¡} d
 | dd krL| ddn| dd¡}t |¡WStj yŠddl
}
|
  d||
j ¡} | rƒz
t |  
¡¡WYStj yYnw|ddœYSw)
结构化输出
Args:
prompt: 用户输入
schema: è¾“å‡ºæ ¼å¼æè¿°
system_prompt: 系统æç¤º
Returns:
è§£æžåŽçš„JSON对象
éÚindentÚ ensure_asciiu>
请按照以下JSONæ ¼å¼è¾“出,ä¸è¦è¾“出其他内容:
r@rArCg333333Ó?)rr"r!z```Ú
éÿÿÿÿéNrz\{.*\}u无法解æžä¸ºJSON)Ú raw_contentÚ parse_error)rÚdumpsr=rEÚstripr.ÚsplitÚjoinr/r2ÚreÚsearchÚDOTALLÚgroup) rr>rHr?Ú schema_textÚ full_systemrrFr!ÚlinesrVÚ
json_matchrrrÚstructured_output†s2 þ  

* ÿözLLMClient.structured_outputÚ user_requestcCs*d}ddgddgdœ}| d|||¡S)
分æžç”¨æˆ·æ„图
Args:
user_request: 用户原始请求
Returns:
{"intent": "...", "keywords": [...], "need_clarification": bool, "questions": [...]}
你是一个æ„图分æžä¸“家。分æžç”¨æˆ·çš„请求,判断:
1. 用户的核心æ„图是什么
2. æå–关键信æ¯
3. ä¿¡æ¯æ˜¯å¦è¶³å¤Ÿå®Œæ•´ï¼ˆä¸éœ€è¦é¢å¤–澄清)
4. 如果ä¸å®Œæ•´ï¼Œéœ€è¦æ¾„清的问题
请以JSONæ ¼å¼è¾“出。u!用户核心æ„å›¾çš„ç®€æ´æè¿°u关键信æ¯åˆ—表u是å¦éœ€è¦æ¾„清 (true/false)u@éœ€è¦æ¾„清的问题列表(如果need_clarification为true))ÚintentÚkeywordsÚneed_clarificationÚ questionsu分æžä»¥ä¸‹ç”¨æˆ·è¯·æ±‚:
)r^)rr_r?rHrrrÚanalyze_intent»s
 üýzLLMClient.analyze_intentr`c
CsZd}ddddhdhdgdœgd gd
œ}| d |d tj|d
ddd||¡}| dg¡S)u
任务拆分
Args:
intent: æ„图分æžç»“æžœ
user_request: 用户原始请求
Returns:
[{"id": "...", "type": "serial/parallel", "description": "...", "dependencies": [...]}]
uh你是一个任务规划专家。根æ®ç”¨æˆ·æ„图,将请求拆分为多个å­ä»»åŠ¡ã€‚
规则:
1. 识别任务之间的ä¾èµ–关系
2. æ— ä¾èµ–的任务标记为parallel(å¯å¹¶è¡Œï¼‰
3. 有ä¾èµ–的任务标记为serial(串行)
4. æ¯ä¸ªä»»åŠ¡æœ‰æ˜Žç¡®çš„æè¿°
5. æ¯ä¸ªä»»åŠ¡æœ‰æ˜Žç¡®çš„è¾“å…¥è¾“å‡ºè¦æ±‚
请以JSONæ ¼å¼è¾“出任务列表。u)任务唯一标识(如task_1, task_2)userial 或 parallelu 任务æè¿°u è¾“å…¥è¦æ±‚u è¾“å‡ºè¦æ±‚uä¾èµ–的任务ID列表)ÚidÚtypeÚ descriptionÚ input_schemaÚ
output_schemaÚ dependenciesu任务执行顺åºè¯´æ˜Ž)ÚtasksÚexecution_orderu用户原始请求: u
æ„图分æžç»“æžœ:
rIFrJu
请拆分为å­ä»»åŠ¡åˆ—è¡¨ã€‚rk)r^rrRr1)rr`r_r?rHrFrrrÚ split_tasksÚs& úÿ
õýø zLLMClient.split_tasksÚtaskÚ
agent_profilec
CsRd}dddddgdgdœ}| d tj|d
d d d
tj|d
d d d||¡}|S)
Agent生æˆç«žæ ‡
Args:
task: 任务定义
agent_profile: Agent档案
Returns:
竞标书内容
u'你是一个执行Agent,需è¦ä¸ºä»»åŠ¡ç«žæ ‡ã€‚
评估你的能力和任务的匹é…度,给出:
1. 能力匹é…度(0-1)
2. é¢„ä¼°å®Œæˆæ—¶é—´ï¼ˆç§’)
3. 自信度(0-1)
4. 执行方案æè¿°
5. å‰ç½®æ¡ä»¶ï¼ˆå¦‚果有)
6. 备选方案(如果有)
请以JSONæ ¼å¼è¾“出。u能力匹é…度 0-1ué¢„ä¼°å®Œæˆæ—¶é—´(ç§’)u
自信度 0-1u执行方案æè¿°uå‰ç½®æ¡ä»¶åˆ—表u备选方案列表)Úcapability_matchÚestimated_timeÚ
confidenceÚapproachÚ
prerequisitesÚalternative_approachesõ任务:
rIFrJu
你的档案:
u
请生æˆç«žæ ‡ä¹¦ã€‚)r^rrR)rrnror?rHrFrrrÚ generate_bid s$
ú ÿü÷ zLLMClient.generate_bidrscCsjd}d|dœddtj|dddd |d
dœg}|j|d d d
}d|vr/|dr/d|diSd|diS)
执行任务
Args:
task: 任务定义
approach: 执行方案
Returns:
执行结果
u“你是一个任务执行者。根æ®ä»»åŠ¡æè¿°å’Œæ‰§è¡Œæ–¹æ¡ˆï¼Œå®Œæˆä»»åŠ¡å¹¶è¾“å‡ºç»“æžœã€‚
输出应该符åˆä»»åŠ¡çš„output_schemaè¦æ±‚。r@rArCrvrIFrJu
执行方案: u#
请执行任务并输出结果。gà?i )rrr"rFr!)rrRr=)rrnrsr?rrFrrrÚ execute_task=sÿ
ýþ
  zLLMClient.execute_taskrFc
Cs`d}ddddgddgdœ}| d tj|d
d d d
t|tƒr&tj|d
d d nt|ƒd||¡S)
验è¯ç»“æžœ
Args:
task: 任务定义
result: 执行结果