Skip to content

Commit 4acfa10

Browse files
committed
v0.1.0
1 parent e7fdb36 commit 4acfa10

File tree

5 files changed

+659
-308
lines changed

5 files changed

+659
-308
lines changed

examples/agent_example.py

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
from pydify.common import DifyAPIError
2121

2222
# 从环境变量或直接设置 API 密钥
23-
API_KEY = os.environ.get("DIFY_API_KEY_AGENT", "app-JH2PWol59GDhOfLpB1Qwvts3")
24-
BASE_URL = os.environ.get("DIFY_BASE_URL", "http://sandanapp.com:8080/v1")
23+
API_KEY = os.environ.get("DIFY_API_KEY_AGENT", 'your_api_key_here')
24+
BASE_URL = os.environ.get("DIFY_BASE_URL", 'http://your_base_url_here')
2525
USER_ID = "user_123" # 用户唯一标识
2626

2727
# 配置API请求参数
@@ -283,21 +283,39 @@ def example_get_suggested_questions():
283283
print("没有可用的消息,跳过此示例")
284284
return
285285

286-
# 获取推荐的下一轮问题
287-
result = client.get_suggested_questions(
288-
message_id=message_id,
289-
user=USER_ID
290-
)
286+
print(f"使用消息ID: {message_id} 获取推荐问题")
291287

292-
questions = result.get("data", [])
293-
if questions:
294-
print("推荐的后续问题:")
295-
for i, question in enumerate(questions, 1):
296-
print(f"{i}. {question}")
297-
else:
298-
print("没有推荐问题")
288+
# 请求参数,包括加入重试和超时设置
289+
request_kwargs = get_request_kwargs()
299290

300-
return questions
291+
try:
292+
# 获取推荐的下一轮问题
293+
result = client.get_suggested_questions(
294+
message_id=message_id,
295+
user=USER_ID,
296+
**request_kwargs # 传递请求参数
297+
)
298+
299+
questions = result.get("data", [])
300+
if questions:
301+
print("推荐的后续问题:")
302+
for i, question in enumerate(questions, 1):
303+
print(f"{i}. {question}")
304+
else:
305+
print("没有推荐问题")
306+
307+
return questions
308+
309+
except DifyAPIError as e:
310+
print(f"API错误: {str(e)}")
311+
print(f"状态码: {e.status_code}")
312+
print(f"错误数据: {e.error_data}")
313+
return []
314+
except Exception as e:
315+
print(f"发生异常: {str(e)}")
316+
import traceback
317+
traceback.print_exc()
318+
return []
301319

302320
def example_rename_conversation():
303321
"""重命名会话示例"""

examples/chatbot_example.py

Lines changed: 83 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,23 @@
2222
BASE_URL = os.environ.get("DIFY_BASE_URL", "http://your-dify-instance.com/v1")
2323
USER_ID = "user_123" # 用户唯一标识
2424

25+
# 配置API请求参数
26+
REQUEST_TIMEOUT = 30 # API请求超时时间(秒)
27+
MAX_RETRIES = 3 # 最大重试次数
28+
RETRY_DELAY = 2 # 重试延迟时间(秒)
29+
2530
# 初始化客户端
2631
client = ChatbotClient(api_key=API_KEY, base_url=BASE_URL)
2732

33+
# 自定义请求参数的函数
34+
def get_request_kwargs():
35+
"""返回一个包含请求参数的字典,可用于所有API请求"""
36+
return {
37+
"timeout": REQUEST_TIMEOUT,
38+
"max_retries": MAX_RETRIES,
39+
"retry_delay": RETRY_DELAY
40+
}
41+
2842
def example_get_app_info():
2943
"""获取应用信息示例"""
3044
print("\n==== 获取应用信息 ====")
@@ -53,19 +67,46 @@ def example_send_message_blocking():
5367
"""以阻塞模式发送消息示例"""
5468
print("\n==== 以阻塞模式发送消息 ====")
5569

56-
# 发送消息(阻塞模式)
57-
response = client.send_message(
58-
query="你好,请介绍一下自己",
59-
user=USER_ID,
60-
response_mode="blocking"
61-
)
70+
# 获取请求参数
71+
request_kwargs = get_request_kwargs()
6272

63-
print("消息ID: ", response.get("message_id", ""))
64-
print("会话ID: ", response.get("conversation_id", ""))
65-
print("AI回答: ", response.get("answer", ""))
73+
try:
74+
# 准备请求参数
75+
query = "你好,请介绍一下自己"
76+
payload = {
77+
"query": query,
78+
"user": USER_ID,
79+
"response_mode": "blocking",
80+
"inputs": {},
81+
"auto_generate_name": True
82+
}
83+
84+
# 打印请求信息
85+
print(f"请求URL: {client.base_url}chat-messages")
86+
print(f"请求参数: {payload}")
87+
88+
# 发送消息(阻塞模式)
89+
response = client.send_message(
90+
query=query,
91+
user=USER_ID,
92+
response_mode="blocking",
93+
inputs={}, # 添加空的inputs参数,即使没有特定输入
94+
**request_kwargs # 传递请求参数
95+
)
96+
97+
print("消息ID: ", response.get("message_id", ""))
98+
print("会话ID: ", response.get("conversation_id", ""))
99+
print("AI回答: ", response.get("answer", ""))
100+
101+
# 返回会话ID,可用于后续对话
102+
return response.get("conversation_id")
66103

67-
# 返回会话ID,可用于后续对话
68-
return response.get("conversation_id")
104+
except Exception as e:
105+
print(f"发送消息时出错: {str(e)}")
106+
# 打印更详细的错误信息
107+
import traceback
108+
traceback.print_exc()
109+
return None
69110

70111
def example_send_message_streaming():
71112
"""以流式模式发送消息示例"""
@@ -108,27 +149,39 @@ def example_continuation_conversation():
108149
"""多轮对话示例"""
109150
print("\n==== 多轮对话示例 ====")
110151

111-
# 第一轮对话
112-
response1 = client.send_message(
113-
query="你好,我想学习Python编程",
114-
user=USER_ID,
115-
response_mode="blocking"
116-
)
117-
118-
conversation_id = response1.get("conversation_id")
119-
print(f"第一轮对话 - AI: {response1.get('answer', '')}")
152+
# 获取请求参数
153+
request_kwargs = get_request_kwargs()
120154

121-
# 第二轮对话(在同一会话中)
122-
response2 = client.send_message(
123-
query="有哪些适合初学者的Python库?",
124-
user=USER_ID,
125-
conversation_id=conversation_id, # 使用第一轮返回的会话ID
126-
response_mode="blocking"
127-
)
128-
129-
print(f"第二轮对话 - AI: {response2.get('answer', '')}")
155+
try:
156+
# 第一轮对话
157+
response1 = client.send_message(
158+
query="你好,我想学习Python编程",
159+
user=USER_ID,
160+
response_mode="blocking",
161+
inputs={},
162+
**request_kwargs
163+
)
164+
165+
conversation_id = response1.get("conversation_id")
166+
print(f"第一轮对话 - AI: {response1.get('answer', '')}")
167+
168+
# 第二轮对话(在同一会话中)
169+
response2 = client.send_message(
170+
query="有哪些适合初学者的Python库?",
171+
user=USER_ID,
172+
conversation_id=conversation_id, # 使用第一轮返回的会话ID
173+
response_mode="blocking",
174+
inputs={},
175+
**request_kwargs
176+
)
177+
178+
print(f"第二轮对话 - AI: {response2.get('answer', '')}")
179+
180+
return conversation_id
130181

131-
return conversation_id
182+
except Exception as e:
183+
print(f"多轮对话时出错: {str(e)}")
184+
return None
132185

133186
def example_get_conversations():
134187
"""获取会话列表示例"""

examples/chatflow_example.py

Lines changed: 101 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,23 @@
2323
BASE_URL = os.environ.get("DIFY_BASE_URL", "http://your-dify-instance.com/v1")
2424
USER_ID = "user_123" # 用户唯一标识
2525

26+
# 配置API请求参数
27+
REQUEST_TIMEOUT = 30 # API请求超时时间(秒)
28+
MAX_RETRIES = 3 # 最大重试次数
29+
RETRY_DELAY = 2 # 重试延迟时间(秒)
30+
2631
# 初始化客户端
2732
client = ChatflowClient(api_key=API_KEY, base_url=BASE_URL)
2833

34+
# 自定义请求参数的函数
35+
def get_request_kwargs():
36+
"""返回一个包含请求参数的字典,可用于所有API请求"""
37+
return {
38+
"timeout": REQUEST_TIMEOUT,
39+
"max_retries": MAX_RETRIES,
40+
"retry_delay": RETRY_DELAY
41+
}
42+
2943
def example_get_app_info():
3044
"""获取应用信息示例"""
3145
print("\n==== 获取应用信息 ====")
@@ -54,19 +68,31 @@ def example_send_message_blocking():
5468
"""以阻塞模式发送消息示例"""
5569
print("\n==== 以阻塞模式发送消息 ====")
5670

57-
# 发送消息(阻塞模式)
58-
response = client.send_message(
59-
query="你好,请介绍一下自己",
60-
user=USER_ID,
61-
response_mode="blocking"
62-
)
71+
# 获取请求参数
72+
request_kwargs = get_request_kwargs()
6373

64-
print("消息ID: ", response.get("message_id", ""))
65-
print("会话ID: ", response.get("conversation_id", ""))
66-
print("AI回答: ", response.get("answer", ""))
74+
try:
75+
# 发送消息(阻塞模式)
76+
response = client.send_message(
77+
query="你好,请介绍一下自己",
78+
user=USER_ID,
79+
response_mode="blocking",
80+
inputs={}, # 添加空的inputs参数,即使没有特定输入
81+
**request_kwargs # 传递请求参数
82+
)
83+
84+
print("消息ID: ", response.get("message_id", ""))
85+
print("会话ID: ", response.get("conversation_id", ""))
86+
print("AI回答: ", response.get("answer", ""))
87+
88+
# 返回会话ID,可用于后续对话
89+
return response.get("conversation_id")
6790

68-
# 返回会话ID,可用于后续对话
69-
return response.get("conversation_id")
91+
except Exception as e:
92+
print(f"发送消息时出错: {str(e)}")
93+
import traceback
94+
traceback.print_exc()
95+
return None
7096

7197
def example_send_message_streaming():
7298
"""以流式模式发送消息示例"""
@@ -103,59 +129,79 @@ def on_workflow_finished(data):
103129
def on_error(chunk):
104130
print(f"\n错误: {chunk.get('message', '未知错误')}")
105131

106-
# 发送消息(流式模式)
107-
stream = client.send_message(
108-
query="分析一下人工智能的未来发展趋势",
109-
user=USER_ID,
110-
response_mode="streaming"
111-
)
112-
113-
# 处理流式响应
114-
result = client.process_streaming_response(
115-
stream,
116-
handle_message=on_message,
117-
handle_message_end=on_message_end,
118-
handle_workflow_started=on_workflow_started,
119-
handle_node_started=on_node_started,
120-
handle_node_finished=on_node_finished,
121-
handle_workflow_finished=on_workflow_finished,
122-
handle_error=on_error
123-
)
132+
# 获取请求参数
133+
request_kwargs = get_request_kwargs()
124134

125-
print("\n\n处理结果摘要:")
126-
print(f"消息ID: {result.get('message_id')}")
127-
print(f"会话ID: {result.get('conversation_id')}")
128-
print(f"工作流运行ID: {result.get('workflow_run_id')}")
129-
print(f"节点数量: {len(result.get('nodes_data', []))}")
135+
try:
136+
# 发送消息(流式模式)
137+
stream = client.send_message(
138+
query="分析一下人工智能的未来发展趋势",
139+
user=USER_ID,
140+
response_mode="streaming",
141+
inputs={}, # 添加空的inputs参数,即使没有特定输入
142+
**request_kwargs # 传递请求参数
143+
)
144+
145+
# 处理流式响应
146+
result = client.process_streaming_response(
147+
stream,
148+
handle_message=on_message,
149+
handle_message_end=on_message_end,
150+
handle_workflow_started=on_workflow_started,
151+
handle_node_started=on_node_started,
152+
handle_node_finished=on_node_finished,
153+
handle_workflow_finished=on_workflow_finished,
154+
handle_error=on_error
155+
)
156+
157+
# 返回会话ID,可用于后续对话
158+
return result.get("conversation_id")
130159

131-
# 返回会话ID,可用于后续对话
132-
return result.get("conversation_id")
160+
except Exception as e:
161+
print(f"发送流式消息时出错: {str(e)}")
162+
import traceback
163+
traceback.print_exc()
164+
return None
133165

134166
def example_continuation_conversation():
135167
"""多轮对话示例"""
136168
print("\n==== 多轮对话示例 ====")
137169

138-
# 第一轮对话
139-
response1 = client.send_message(
140-
query="你好,我想了解工作流编排的概念",
141-
user=USER_ID,
142-
response_mode="blocking"
143-
)
144-
145-
conversation_id = response1.get("conversation_id")
146-
print(f"第一轮对话 - AI: {response1.get('answer', '')}")
147-
148-
# 第二轮对话(在同一会话中)
149-
response2 = client.send_message(
150-
query="能给我举个工作流编排的实际应用例子吗?",
151-
user=USER_ID,
152-
conversation_id=conversation_id, # 使用第一轮返回的会话ID
153-
response_mode="blocking"
154-
)
170+
# 获取请求参数
171+
request_kwargs = get_request_kwargs()
155172

156-
print(f"第二轮对话 - AI: {response2.get('answer', '')}")
173+
try:
174+
# 第一轮对话
175+
response1 = client.send_message(
176+
query="你好,我想了解工作流编排的概念",
177+
user=USER_ID,
178+
response_mode="blocking",
179+
inputs={}, # 添加空的inputs参数,即使没有特定输入
180+
**request_kwargs # 传递请求参数
181+
)
182+
183+
conversation_id = response1.get("conversation_id")
184+
print(f"第一轮对话 - AI: {response1.get('answer', '')}")
185+
186+
# 第二轮对话(在同一会话中)
187+
response2 = client.send_message(
188+
query="工作流编排有哪些常见的应用场景?",
189+
user=USER_ID,
190+
conversation_id=conversation_id, # 使用第一轮返回的会话ID
191+
response_mode="blocking",
192+
inputs={}, # 添加空的inputs参数,即使没有特定输入
193+
**request_kwargs # 传递请求参数
194+
)
195+
196+
print(f"第二轮对话 - AI: {response2.get('answer', '')}")
197+
198+
return conversation_id
157199

158-
return conversation_id
200+
except Exception as e:
201+
print(f"多轮对话时出错: {str(e)}")
202+
import traceback
203+
traceback.print_exc()
204+
return None
159205

160206
def example_get_conversations():
161207
"""获取会话列表示例"""

0 commit comments

Comments
 (0)